将参数或变量指定为__attribute__((未使用))是否允许编译器执行任何额外的优化?



我对LLVM 4.1特别感兴趣,但也会对其他编译器的行为感兴趣。

根据GCC文档(LLVM至少部分支持),unused属性具有以下行为:

This attribute, attached to a variable, means that the variable is meant to be possibly unused. GCC will not produce a warning for this variable. 

如果编译器能够警告您未使用的参数和变量,那么它可能已经知道哪些参数和变量未使用,而无需您告诉它(特别是因为unused属性仅指示变量可能未使用)。因此,unused属性是否允许编译器执行任何额外的优化,或者它的目的只是为了允许更可读的代码?另外,如果unused属性实际上允许编译器执行额外的优化,那么如果最终使用指定为unused的参数或变量会发生什么?LLVM(在XCode中)似乎没有抱怨这种情况,尽管有可能我没有在正确的优化级别编译或启用正确的警告。

__attribute__((unused))无助于优化,这并不意味着该值一定是未使用的。它会抑制警告(如果有这个警告的原因,即如果值确实未使用),仅此而已。

最新更新