gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:25:36 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com