将参数或变量指定为__attribute __((unused))是否允许编译器执行任何其他优化?

时间:2013-01-17 21:03:30

标签: gcc llvm llvm-gcc llvm-clang

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

根据GCC documentation(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中)似乎没有抱怨这种情况,尽管我可能没有在正确的优化级别编译或启用了正确的警告。

1 个答案:

答案 0 :(得分:6)

__attribute__((unused))无法帮助优化,并不意味着该值必然未使用。它会抑制警告(如果出现此警告的原因,即,如果值确实未使用),那就是全部。