Терминал не показывает предупреждения программы … Как их увидеть в терминале?

Это простая программа, которую я написал с помощью редактора 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$

В терминале мы видим ошибки …

Как увидеть эти предупреждения?

Любая команда? Чтобы увидеть предупреждения?

0

Решение

Уровень предупреждений в 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.

4

Другие решения

Других решений пока нет …