我正在阅读有关C和C++函数属性的GCC文档。在
error
和warning
属性的描述中,文档随意提到以下“技巧”:
没有进一步的解释。也许对于沉浸在环境中的程序员来说很明显,但对我来说却一点也不明显,我在网上找不到任何解释。这个技术是什么,我什么时候可以使用它?
error ("message")
warning ("message")
如果在函数声明上使用
error
或warning
属性,并且通过死代码消除或其他优化未消除对该函数的调用,则会诊断出一个包含message的错误或警告(分别)。这对于编译时检查非常有用,特别是与__builtin_constant_p
和内联函数一起使用时,通过extern char [(condition) ? 1 : -1];
技巧无法检查内联函数参数的情况。虽然可以将函数未定义并因此引发链接失败(以带有消息的
.gnu.warning*
部分定义函数),但使用这些属性时,即使存在内联函数或不发出调试信息,问题也会更早地被诊断出来,并且可以准确地确定调用位置。