这是我找到的代码
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
在运行时发生的常规不同,此断言发生在编译时.换句话说,如果常规断言是错误的,程序将崩溃; 如果这个断言是假的,那么程序甚至都不会编译.
这assert
通过触发编译时错误来执行.考虑以下代码:
switch(0) case 0: case 0:
编译器会告诉您case
标签重复,因为零列出两次.另一方面,如果你用任何数字而不是零代替x
,你就会得到
switch(1) case 0: case 1:
这是完全合法的,不会触发编译时错误.
与assert
在运行时发生的常规不同,此断言发生在编译时.换句话说,如果常规断言是错误的,程序将崩溃; 如果这个断言是假的,那么程序甚至都不会编译.