【问题标题】:Does specifying parameters or variables as __attribute__ ((unused)) allow the compiler to perform any additional optimizations?将参数或变量指定为 __attribute__ ((unused)) 是否允许编译器执行任何其他优化?
【发布时间】:2013-01-17 21:03:30
【问题描述】:

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

【问题讨论】:

  • 请注意,LLVM (clang) 是一个单独的编译器,它接受一些 GCC 标志以与事实上的标准兼容。
  • 是的,更改了我原来帖子中的一些措辞以使其更清晰。
  • @Joe,你的意思是任何编辑都应该是评论吗?
  • @mon4goos 该评论属于一个现已删除的答案,当它被删除时,它将它移到问题上,因此它脱离了上下文。顺便问下好问题。
  • @Joe 谢谢!出于好奇,你是怎么弄明白的?

标签: gcc llvm llvm-gcc llvm-clang


【解决方案1】:

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

【讨论】:

  • 它的一个用途是在某些编译单元中使用的标头中的常量,而不是在其他编译单元中使用 - 否则您会收到一些无用的警告。
猜你喜欢
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
  • 2016-05-07
  • 2019-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多