这是我找到的代码
static_assert(sizeof(struct File) == 256);
宏的定义是:
#define static_assert(x) switch (x) case 0: case (x):
答案 0 :(得分:8)
这会通过触发编译时错误来执行assert
。请考虑以下代码:
switch(0) case 0: case 0:
编译器会告诉您标签有重复case
,因为零列出了两次。另一方面,如果您将{0}以外的任何数字替换为x
,您将得到
switch(1) case 0: case 1:
这是完全合法的,不会触发编译时错误。
与运行时发生的常规assert
不同,此断言发生在编译时。换句话说,如果常规断言是错误的,程序将崩溃;如果这个断言是假的,程序甚至都不会编译。