当前位置:  开发笔记 > 编程语言 > 正文

这个单行的宏函数'static_assert'做什么用的?

如何解决《这个单行的宏函数'static_assert'做什么用的?》经验,为你挑选了1个好方法。

这是我找到的代码

static_assert(sizeof(struct File) == 256);

宏的定义是这样的:

#define static_assert(x)    switch (x) case 0: case (x):

    这是如何执行断言的?

    为什么不直接使用常规的assert()函数?

dasblinkenli.. 9

assert通过触发编译时错误来执行.考虑以下代码:

switch(0) case 0: case 0:

编译器会告诉您case标签重复,因为零列出两次.另一方面,如果你用任何数字而不是零代替x,你就会得到

switch(1) case 0: case 1:

这是完全合法的,不会触发编译时错误.

assert在运行时发生的常规不同,此断言发生在编译时.换句话说,如果常规断言是错误的,程序将崩溃; 如果这个断言是假的,那么程序甚至都不会编译.



1> dasblinkenli..:

assert通过触发编译时错误来执行.考虑以下代码:

switch(0) case 0: case 0:

编译器会告诉您case标签重复,因为零列出两次.另一方面,如果你用任何数字而不是零代替x,你就会得到

switch(1) case 0: case 1:

这是完全合法的,不会触发编译时错误.

assert在运行时发生的常规不同,此断言发生在编译时.换句话说,如果常规断言是错误的,程序将崩溃; 如果这个断言是假的,那么程序甚至都不会编译.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有