【发布时间】:2017-12-04 00:38:56
【问题描述】:
我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呢?
【问题讨论】:
-
所有这一切似乎都是在检查
a是一个编译时常量。b甚至没有被使用。它扩展为的代码在没有真正做任何事情的情况下就失败了。switch (0)与switch (100)或任何其他值没有区别。它分支到case 0并从那里继续执行。a不应该是一个变量,它是你传递给宏的任何东西。它应该是一个常数。如果你传递一个变量,你会得到一个编译时错误。 -
static_assert可以给你一些提示,虽然这里的意图和用法不同,这个名字不是一个好的选择 -
作为标准
static_assert的实现存在缺陷,因为它不能在函数之外工作
标签: c switch-statement