一个'开关0'的目的是什么? C中的陈述?

时间:2017-12-04 00:38:57

标签: c switch-statement

came across以下代码行,我无法弄清楚它的作用。

#define static_assert(a, b) do { switch (0) case 0: case (a): ; } while (0)

switch (0)部分有什么作用?假设0等同于false,这是否意味着我们永远不会输入switch语句?

同样对于case (a)行,您如何将未知的a变量作为案例?

1 个答案:

答案 0 :(得分:5)

switch(0)将始终执行与case 0:块关联的代码块;仍然,这里没有实际执行的代码 - 两种情况都是空的。

如果未验证断言的表达式(a),这里的重点是使编译器在编译时生气 :在这种情况下,扩展的宏将有两个{{1显式提供的那个,以及使用断言表达式结果的那个(所以,如果失败则为0);这导致case 0:具有两个相同的switch,这是不允许的,并使编译器在编译时停止并出现错误。

如果传递的表达式不是在编译时计算的常量(因为您不能具有运行时确定的case值),这也将失败,这也是case的预期值。