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

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

В терминале мы просто видим ошибки...
Как увидеть эти предупреждения?
Любая команда? Чтобы увидеть предупреждения?


person Community    schedule 09.03.2018    source источник
comment
вам нужно включить их: g++ -Wall test1.cp -o test1   -  person Jean-François Fabre    schedule 09.03.2018
comment
Неправильный язык! Я исправил.   -  person Bathsheba    schedule 09.03.2018


Ответы (1)


Уровень предупреждений 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-in-this-тривиальный-ex">почему я не получаю использованное неинициализированное предупреждение от gcc в этом тривиальном примере?). Для этого вам понадобится более специализированный инструмент, такой как Valgrind.

person Jean-François Fabre    schedule 09.03.2018
comment
Я предлагаю g++ -Wall -Wextra -g test1.cpp -o test1 получить еще больше предупреждений и исполняемый файл с отладочной информацией (в формате DWARF) - person Basile Starynkevitch; 09.03.2018
comment
Добавление отладки или нет вряд ли имеет отношение к текущему вопросу (например, к уровню оптимизации, который может повлиять на предупреждения...). Но я согласен с Wextra. отредактировано. - person Jean-François Fabre; 09.03.2018
comment
Новичок захочет отладить свою программу - person Basile Starynkevitch; 09.03.2018
comment
Я думал, что новички никогда не отлаживали свои программы, поэтому они и пишут здесь :). Хотя я согласен, это вопрос о предупреждениях, а не о том, какие варианты компиляции являются лучшими. Вероятно, это описано в какой-то другой теме. - person Jean-François Fabre; 09.03.2018
comment
@Jean-François Fabre, может быть, ты прав... я согласен, я новичок в Cpp :) ... мне нравится python... но я должен выучить C/C++ для колледжа!... и я просто начинаю это прямо сейчас :) 1 час назад! В любом случае, благодарю Вас - person ; 09.03.2018
comment
удачи, и помните: python превосходен, но недостаточно быстр для некоторых приложений, и вам иногда приходится повторно использовать некоторые коды C или C++, так что лучше изучите их все. Затем при необходимости используйте python (например, для запуска программ C в циклах и использования их результатов). - person Jean-François Fabre; 09.03.2018
comment
и да, сразу научитесь пользоваться отладчиком. Отладчик Visual C++ достаточно удобен для системы. gdb нужен хороший интерфейс, иначе с ним просто ужасно работать. - person Jean-François Fabre; 09.03.2018