Это простая программа, которую я написал с помощью редактора vim:
#include <iostream>
using namespace std;
int main()
{
int a;
int b, c ;
a=(b+c+11)/3;
cout << "x=" << a;
cout << "\n";
return 0;
}
Мы можем увидеть предупреждения в визуальной студии в окнах:
...error(s), 2 warning(s)
...\test1.cpp(7) : warning c4700: local variable 'b' used without having been initialized
...\test1.cpp(7) : warning c4700: local variable 'c' used without having been initialized
Но, когда мы используем gnome-терминал, мы не можем видеть предупреждения:
SSS@SSS:~/.cpp$ g++ test1.cpp -o test1
SSS@SSS:~/.cpp$ chmod +x test1
SSS@SSS:~/.cpp$ ./test1
x=10925
SSS@SSS:~/.cpp$
В терминале мы видим ошибки …
Как увидеть эти предупреждения?
Любая команда? Чтобы увидеть предупреждения?
Уровень предупреждений в Visual Studio по умолчанию отличается от g++
уровень предупреждения по умолчанию.
Вы должны включить предупреждения (я предлагаю -Wall
) чтобы увидеть их.
g++ -Wall test1.cpp -o test1
печатает:
test1.cpp: In function 'int main()':
test1.cpp:8:9: warning: 'b' is used uninitialized in this function [-Wuninitialized]
a=(b+c+11)/3;
~^~
test1.cpp:8:9: warning: 'c' is used uninitialized in this function [-Wuninitialized]
как следует из сообщения -Wuninitialized
достаточно для такого рода предупреждений, но я предлагаю вам использовать -Wall
для начала, и отключите предупреждения, которые вам не нужны, если вы действительно Нужно это в каком-то устаревшем коде, лучший способ — включить дополнительные предупреждения и превратить предупреждения в ошибки, чтобы люди могли их исправить:
g++ -Wall -Wextra -Werror ...
Также обратите внимание, что вы не можете полагаться на это предупреждение, чтобы обнаружить все неинициализированные переменные. Есть сложные случаи, когда компилятор не может решить, инициализирован ли он (см. почему я не получаю "используется неинициализированный" предупреждение от gcc в этом тривиальном примере?). Для этого вам нужен более специализированный инструмент, такой как Valgrind.
Других решений пока нет …