我came across下面这行代码,我不知道它做了什么。
#define static_assert(a, b) do { switch (0) case 0: case (a): ; } while (0)
switch (0)
部分的作用是什么?假设 0
等同于 false
,这是否意味着我们永远不会输入 switch 语句?
同样对于 case (a)
行,如何将未知的 a
变量作为 case?
最佳答案
switch(0)
将始终执行与 case 0:
关联的代码块堵塞;不过,这里没有实际执行的代码 - 两种情况都是空的。
这里的要点是如果断言表达式 (a
) 未被验证,编译器在编译时生气:在这种情况下,展开的宏将有两个 case 0:
。 - 一个显式提供,一个使用断言表达式的结果(因此,如果失败则为 0);这导致 switch
有两个相同的case
,这是不允许的,并且会使编译器在编译时因错误而停止。
如果传递的表达式不是在编译时评估的常量(因为您不能具有运行时确定的 case
值),这也将失败,这也是 static_assert
所期望的.
关于c - C 中 'switch 0' 语句的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47624957/