Как резюмировал alk, используйте эти флаги:
-pedantic -Wall -Wextra -Wconversion
Во-первых, я думаю, вы не хотите использовать флаг -ansi
, как это предлагается в Что следует использовать в качестве флагов компилятора -ansi или явное -std = ...?
Во-вторых, -Wextra
тоже кажется весьма полезным, как предлагается в -Wextra, насколько это действительно полезно?
В-третьих, -Wconversion
также кажется полезным, как предлагается в Могу ли я сделать так, чтобы GCC тоже предупреждал о прохождении от типов к функциям?
В-четвертых, также помогает -pedantic
, поскольку предложено в Какова цель использования -pedantic в компиляторе GCC / G ++?.
Наконец, включение -Wall
в этом случае должно быть нормальным, поэтому я очень сомневаюсь в том, что вы сказали.
Пример с gcc:
Georgioss-MacBook-Pro:~ gsamaras$ cat main.c
int main(void)
{
int x = 1;
int y = x+ ++x;
return 0;
}
Georgioss-MacBook-Pro:~ gsamaras$ gcc -Wall main.c
main.c:4:16: warning: unsequenced modification and access to 'x' [-Wunsequenced]
int y = x+ ++x;
~ ^
main.c:4:9: warning: unused variable 'y' [-Wunused-variable]
int y = x+ ++x;
^
2 warnings generated.
Georgioss-MacBook-Pro:~ gsamaras$ gcc -v
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 8.1.0 (clang-802.0.38)
Target: x86_64-apple-darwin16.3.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
Пример с g ++, та же версия:
Georgioss-MacBook-Pro:~ gsamaras$ cp main.c main.cpp
Georgioss-MacBook-Pro:~ gsamaras$ g++ -Wall main.cpp
main.cpp:4:16: warning: unsequenced modification and access to 'x'
[-Wunsequenced]
int y = x+ ++x;
~ ^
main.cpp:4:9: warning: unused variable 'y' [-Wunused-variable]
int y = x+ ++x;
^
2 warnings generated.
Соответствующий мой ответ, что Стена снова спасает положение с аналогичной проблемой.
person
gsamaras
schedule
14.05.2017
gcc
, чтобы узнать, какие флаги он поддерживает и какие из них будут вам полезны? - person Algirdas Preidžius   schedule 14.05.2017-ansi
не делает ваш код более безопасным или надежным, он просто заставляет его использовать устаревшую версию диалекта. Используйте-std=<version>
для соответствия выбранному вами стандарту, например-std=c99
или-std=c++11
. - person spectras   schedule 14.05.2017-Wall
более чем достаточно, иногда-Wextra
. Кроме того, ручной выбор конкретных контекстно-зависимых предупреждений может иметь смысл. Рассмотрите также-Werror
для сборки разработчика, если вы хотите применить политику отсутствия предупреждений. - person spectras   schedule 14.05.2017-pedantic -Wall -Wextra -Wconversion
помогает вам, но не позволяет избежать ошибок времени выполнения, которых вы, вероятно, никогда не сможете достичь с помощью статического анализа кода. - person alk   schedule 14.05.2017g++
:-std=c++14 -O3 -ggdb3 -march=core2 -fno-common -pipe -Werror -Wall -Wextra -Wvla -Wreorder -Wnon-virtual-dtor -Wpacked -Wcast-align -Wenum-compare -Wpointer-arith -Wunused -Wuninitialized -Winit-self -Winvalid-pch -Woverlength-strings -Woverloaded-virtual -Woverflow -Wsequence-point -Wno-unknown-pragmas -Wtrigraphs -finput-charset=UTF-8 -Wpacked-bitfield-compat -Wlogical-op -Wsync-nand -Wstrict-null-sentinel -Wnoexcept
- person Jesper Juhl   schedule 14.05.2017