gpt4 book ai didi

c++ - 更多警告 -Os

转载 作者:搜寻专家 更新时间:2023-10-31 01:14:58 30 4
gpt4 key购买 nike

这个程序

int main()
{
int a, b;
a = b;
return 0;
}

编译时没有警告或错误,如果你编译它

g++ -Wall test.cpp

但是,如果您在编译时进行优化,即使在相同的警告级别也是如此

g++ -Wall -Os test.cpp

然后它会开始提示你正在使用未初始化的变量!
(注意:实际程序稍长,并没有像这里的这个小例子那样清楚地暴露问题。)

我尝试使用谷歌进行搜索,但要么我没有使用正确的搜索词,要么这不是已知现象。不管怎样,我的问题基本上是

  • 为什么编译器会使用 -Os 而不是 -O0 给出此警告,即使是在相同的警告级别? (如果有的话,我希望这个小例子是相反的,因为可以完全优化变量,然后问题就会消失。)
  • 是否有任何其他编译器选项会触发像这样的意外警告?因为我对让我的程序没有错误很感兴趣,所以我喜欢看到所有这些!
  • 这是已知功能吗?如果是这样,我在哪里可以找到它?我确实尝试过搜索。
  • 或者这只是我特定版本的编译器(gcc 4.3.2-1.1,Linux,32 位)中的一个小故障?

最佳答案

编译器需要进行额外的检查以执行一些优化,这会导致它发出额外的警告。在An Introduction to GCC的相关章节中有简要说明。 .

顺便说一句,在我的平台(x86 上的 32 位 ubuntu 12.04)上,代码使用 gcc 4.6.3、gcc 4.7.0 和 gcc 4.8 快照生成警告:

uninitialized.cpp: In function 'int main()': uninitialized.cpp:3:9: warning: variable 'a' set but not used [-Wunused-but-set-variable] uninitialized.cpp:4:10: warning: 'b' is used uninitialized in this function [-Wuninitialized]

关于c++ - 更多警告 -Os,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10671492/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com