我发现了以下代码行,但我无法弄清它的作用。
我偶然发现了这行代码,但我无法弄清它的作用。
#define static_assert(a, b) do { switch (0) case 0: case (a): ; } while (0)
switch (0)
是假设0
等同于false
的情况下,进入switch语句后不会执行任何case分支。
对于case (a)
这一行,你可以将未知的变量a
作为一个case选项。
a
是否为编译时常量。b
甚至没有被使用。它展开后的代码只是简单地跳过,没有真正做任何事情。switch(0)
与switch(100)
或其他任何值没有区别。它会跳转到case 0
,然后从那里继续执行。而且a
不应该是一个变量,它应该是您传递给宏的任何常量。如果传递了一个变量,您将收到一个编译时错误。 - Tom Karzesstatic_assert
可以给你一些提示,尽管这里的意图和用法不同,而且这个名称也不是一个好的选择。 - phuclvstatic_assert
实现有缺陷,因为它在函数外部无法工作。 - M.M