gpt4 book ai didi

c++ - 为什么 GCC 不报告未初始化的变量?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:34 25 4
gpt4 key购买 nike

#include <ios>
#include <iostream>
#include <map>

using namespace std;

int main() {
ios_base::sync_with_stdio(false);
map<int, int> v;
int i;
int t;
while (cin >> i) {
v[i] = t++;
}
auto mi = i;
auto mt = t;
for (const auto p : v) {
if (p.second < mt) {
mi = p.first;
mt = p.second;
}
}
cout << mi << '\n';
return 0;
}

上述程序大量使用了未初始化的变量t,但GCC 没有用-Wall 或-Wuninitialized 报告它。为什么会这样?

值得注意的是,Clang 捕获了它:

main.cpp:13:12: warning: variable 't' is uninitialized when used here [-Wuninitialized]
v[i] = t++;
^

使用 g++ (GCC) 7.2.1 20170915 (Red Hat 7.2.1-2)。

使用 clang 版本 4.0.1 (tags/RELEASE_401/final)。


正如您在 https://godbolt.org/g/kmYMC1 中看到的那样GCC 7.2 即使应该报告也不会报告。我将在 GCC 的问题跟踪器中创建一张票。

最佳答案

g++ 的警告标志不叫-Wuninitialized:它叫-Wmaybe-uninitialized

此外,as Jonathan Wakely noted in his answer , g++ 仅在启用优化时才能够检测未初始化变量的使用情况。

同时启用 -Wmaybe-initalized 和优化会产生预期的警告:https://godbolt.org/g/3CZ6kT

请注意,-Wmaybe-initalized 默认启用 -Wall-Wextra

关于c++ - 为什么 GCC 不报告未初始化的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47307538/

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