web-dev-qa-db-ja.com

Cの推奨gcc警告オプション

-Wall以外に、人々が有用だと思った他の警告は何ですか?

http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html

78
Sard

私は定期的に使用します:

    gcc -m64 -std=c99 -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual \
        -Wstrict-prototypes -Wmissing-prototypes

このセットは、使用していない人(これらのフラグを使用して初めてコードをコンパイルする人)にとって非常に役立ちます。それはめったに問題を与えません(-Wcast-qualは時々迷惑です)。

45

2011-09-01現在、gccバージョン4.6.1

私の現在の「開発」エイリアス

 gcc -std = c89 -pedantic -Wall\
 -Wno-missing-braces -Wextra -Wno-missing-field-initializers -Wformat = 2\
 -Wswitch-default -Wswitch-enum -Wcast-align -Wpointer-arith\
 -Wbad-function-cast -Wstrict-overflow = 5 -Wstrict-prototypes -Winline\
 -Wundef -Wnested-externs -Wcast -qual -Wshadow -Wunreachable-code\
 -Wlogical-op -Wfloat-equal -Wstrict-aliasing = 2 -Wredundant-decls\
 -Wold-style-definition -Werror\
 -ggdb3\
 -O0\
 -fno-omit-frame-pointer -ffloat-store -fno-common -fstrict-aliasing\
 -lm 

「リリース」エイリアス

 gcc -std = c89 -pedantic -O3 -DNDEBUG -flto -lm 

2009-11-03現在

「開発」エイリアス

 gcc -Wall -Wextra -Wformat = 2 -Wswitch-default -Wcast-align -Wpointer-arith\
 -Wbad-function-cast -Wstrict-prototypes -Winline -Wundef -Wnested-externs\
 -Wcast-qual -Wshadow -Wwrite-strings -Wconversion -Wunreachable-code\
 -Wstrict-aliasing = 2 -ffloat-store -fno-common -fstrict-aliasing\
 -lm -std = c89 -pedantic -O0 -ggdb3 -pg --coverage 

「リリース」エイリアス

 gcc -lm -std = c89 -pedantic -O3 -DNDEBUG --combine -fwhole-program -funroll-loops 
36
pmg

-Werrorが好きです。コードの警告を無料にします。

15
JesperE

私はC++で始めたので、Cを学習するように切り替えたとき、私は必ず特別なことをしました。

-fmessage-length = 0 
-ansi -pedantic -std = c99 
-Werror 
-Wall 
-Wextra 
 -Wwrite-strings 
-Winit-self 
-Wcast-align 
-Wcast-qual 
-Wpointer-arith 
-Wstrict-aliasing 
-Wformat = 2 
-Wmissing-declarations 
-Wmissing-include-dirs 
-Wno-unused-parameter 
-Wuninitialized 
 -Wold-style-definition 
-Wstrict-prototypes 
-Wmissing-prototypes 
15
Tom

使用しているGCCバージョンのマニュアルを入手し、すべての警告オプションが利用可能を見つけてから、のみ有力なを無効にしますそうする理由。 (たとえば、さもなければ多くの警告を与える変更不可能なサードパーティのヘッダー。)それらの理由を文書化します。(Makefileまたはどこでもこれらのオプションを設定します。)設定を定期的な間隔およびコンパイラをアップグレードするたびに確認します。

コンパイラはあなたの友達です。警告はあなたの友達です。潜在的な問題をできる限り伝える機会をコンパイラに与えます。

9
DevSolar

私も使用します:

-Wstrict-overflow = 5

整数のオーバーフロー動作に依存するコードを記述した場合に発生するmayという厄介なバグをキャッチします。

そして:

-ウェクストラ

これにより、ニースの一部のオプションも有効になります。ただし、ほとんどはC++用です。

5

-pedantic -Wall -Wextra -Wno-write-strings -Wno-unused-parameter

「たくさん痛い」モードでは、-Wno ...

特にC++では、コードの警告を無料で送信するのが好きです。 Cコンパイラの警告はしばしば無視できますが、多くのC++警告はソースコードに根本的な欠陥を示しています。

2
Thorsten79

通常、「-W -Wall -ansi -pedantic」でコンパイルします。これにより、コードの品質と移植性を最大限に高めることができます。

2
Evan Teran

-pedantic-errors

1
Tom Ritter

-Wfloat-equal、-Wshadow、-Wmissing-prototypes、

1
Mark Bessey

-Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wextra -Werror-implicit-function-declaration -Wunused -Wno-unused-value -Wreturn-type

1
florin

今私は使用しています:

-Wall -W -Wextra -Wconversion -Wshadow -Wcast-qual -Wwrite-strings -Werror

私はそのリストを主に「An Introduction to gcc」という本から取り、次に一部を lrich Drepper Defensive Programmingに関する推奨事項(- http://people.redhat.com/drepper/Defensive- slides.pdf )。

しかし、私は私のリストの背後にある科学を持っていません、それはちょうど良いリストのように感じました。

/ヨハン


注:私はそれらの退屈なフラグが好きではありませんが....

注:-Wと-Wextraはほぼ同じものだと思います。

1
Johan

私は一般的に使用します

gcc -Wall -W -Wunused-parameter -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes -Wsign-compare -Wconversion -Wshadow -Wcast-align -Wparentheses -Wsequence-point -Wdeclaration-after-statement -Wundef -Wpointer-arith -Wnested-externs -Wredundant-decls -Werror -Wdisabled-optimization -pedantic -funit-at-a-time -o
1
amaterasu

初期化されていない変数に関する警告は、-Oを指定しないと機能しません。そのため、リストに追加します。

-g -O -Wall -Werror -Wextra -pedantic -std=c99
1
Josh Lee

-Wfatal-errors

0
Adrian Panasiuk