这个单行,宏功能,' static_assert'做?

时间:2015-12-26 18:56:49

标签: c

这是我找到的代码

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

宏的定义是:

#define static_assert(x)    switch (x) case 0: case (x):
  1. 这是如何执行断言的?
  2. 为什么不直接使用常规的assert()函数?

1 个答案:

答案 0 :(得分:8)

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

switch(0) case 0: case 0:

编译器会告诉您标签有重复case,因为零列出了两次。另一方面,如果您将{0}以外的任何数字替换为x,您将得到

switch(1) case 0: case 1:

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

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