为什么GCC给出了局部变量未使用的变量的错误,但不是全局变量?

StackOverflow https://stackoverflow.com/questions/664414

  •  21-08-2019
  •  | 
  •  

我有关于GCC的问题。为什么我得到的未使用变量的错误,当我在一个函数定义本地变量而不是在该变量是在一个独特的文件中全局?

我可以理解,它可以使用别人的,但要做到这一点,然后我需要把外部字吧?

预先感谢。

有帮助吗?

解决方案

如果通过“以一种独特的文件中全局”,你的意思是"int x;"任何功能之外,在它不是编译器的工作,检测的变量需要提供给案件另一个编译单元需要它的连接(如号)。

如果你的意思"static int x"它不是提供给连接器,这可能只是GCC作出了选择。我不相信编译器的需要以通知这一点,它比你的地址空间浪费几个字节没有实际的损害。

其他提示

,编译器不具有如果使用的全局变量办法知道 - 它可以从写在一个完全不同的语言编译单元中使用,例如

由于全局变量可以对编译器不能已知的任何其他地方使用。例如在一个外部库O程序。

未使用的当地人可以由编译器来确定。未使用的全局变量只能通过接头来确定,因为它们可以在目标文件被共享。

在一般情况下,连接基团不为代码生成做的警告。

当变量是全球性的,编译器在所有的编译单元项目不完全的可视性 - 变量可以在另一个编译单元进行修改。链接器可以告诉大家,它是未使用,可能会从对象文件中删除。

由于如果它是全球它可以通过获取在后面连接的其他模块一起使用。

这是一个常见的成语有在一个单一的文件中定义的所有全局变量。该文件可能甚至没有使用所有的变量的任何代码,少得多的代码。

我也遇到同样的问题,当我建立了Android2.3的dalvikVM和我点的关键。这是因为,该编译器的参数是过于严格:

<强> LOCAL_CFLAGS + = -Werror

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top