c - C 中 'switch 0' 语句的目的是什么?

标签 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 变量作为 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/

相关文章:

iphone - UIButton 作为开关

c - 使用 scanf() 和 switch 语句计算字符串中的字符数

c - 如何通过整数/整数C语言获取 float

c++ - 奇怪的堆损坏错误

c - int *ptr= 5 怎么做;与 int *ptr= 变量地址不同?

c - 在 C 中初始化动态 union 数组

c++ - 跳转绕过 switch 语句中的变量初始化

switch-statement - 如何根据 Leaflet 中的比较运算符设置特征样式

c# - C# switch 语句中的变量声明

c - 数组的长度始终为 2