Boa*_*ann 10 c c++ gcc compile-time
我正在阅读有关 C 和 C++ 函数属性的 GCC 文档。error在和属性的描述中warning,文档不经意地提到了以下“技巧”:
error ("message")
warning ("message")如果在函数声明上使用
errororwarning属性,并且没有通过死代码消除或其他优化来消除对此类函数的调用,则会诊断出包含消息的错误或警告(分别)。这对于编译时检查很有用,特别是与__builtin_constant_p内联函数一起使用时,通过技巧无法检查内联函数参数extern char [(condition) ? 1 : -1];。虽然可以使函数未定义,从而调用链接失败(在
.gnu.warning*节中使用消息定义函数),但使用这些属性时,即使存在内联函数或存在内联函数或调用的确切位置,也可以更早地诊断出问题。当不发出调试信息时。
没有进一步的解释。也许对于沉浸在环境中的程序员来说这是显而易见的,但对我来说却一点也不明显,而且我在网上找不到任何解释。这项技术是什么?我什么时候可以使用它?
我相信前提是要有编译时断言功能。假设你写了
extern char a[(condition) ? 1 : -1];
Run Code Online (Sandbox Code Playgroud)
如果condition是true,则什么也不会发生,并且该行编译为空。确保extern不a使用任何内存。但是,如果iscondition被声明为负长度数组,则会出现编译时错误。falsea
您可能将其包装在宏中并具有类似的内容static_assert
#define STATIC_ASSERT(condition) extern char a[(condition) ? 1 : -1]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |