Jet*_*lue 4 c switch-statement
我遇到了以下代码行,我无法弄清楚它的作用.
#define static_assert(a, b) do { switch (0) case 0: case (a): ; } while (0)
Run Code Online (Sandbox Code Playgroud)
这switch (0)
部分做什么?假设0
相当于false
,这是否意味着我们永远不会进入switch语句?
同样对于该行case (a)
,您如何将未知a
变量作为案例?
switch(0)
将始终执行与块关联的代码case 0:
块; 仍然,这里没有实际执行的代码 - 两个案例都是空的.
这里的要点是如果未验证断言的表达式(),则编译器会在编译时生气a
:在这种情况下,扩展宏将有两个case 0:
- 显式提供的,以及使用断言表达式结果的宏()所以,0如果失败了); 这导致switch
两个相同的case
,这是不允许的,并使编译器在编译时停止错误.
如果传递的表达式不是在编译时计算的常量(因为您不能具有运行时确定的case
值),这也将失败,这也是a期望的static_assert
.