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

mon*_*oos 4 gcc llvm llvm-gcc llvm-clang

我对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. 
Run Code Online (Sandbox Code Playgroud)

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

Ant*_*nko 6

__attribute__((unused))没有帮助优化,并不意味着该值必然未被使用.它会抑制警告(如果有这个警告的原因,也就是说,如果该值确实未被使用),那就是全部.