web-dev-qa-db-ja.com

「g ++ -Wall test.cpp -o test」の「-Wall」は何をしますか?

-oは出力ファイル名を変更します(--helpを使用していることがわかりました)

しかし、_-Wallは?

75
steven

これは「すべてに警告」の略です。g++が通知できるすべての警告を(ほぼ)オンにします。これらの警告を理解して修正すると、コード内のさまざまな種類の問題を修正できるので、一般的には、特に初心者の場合は良い考えです。

95
MatrixFrog

Man gccを参照してください。

-Wallはこれらの警告をオンにします:

-Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts
-Wenum-compare (in C/Objc; this is on by default in C++) -Wimplicit-int (C and
 Objective-C only) -Wimplicit-function-declaration (C and Objective-C only) 
-Wcomment -Wformat -Wmain (only for C/ObjC and unless -ffreestanding) 
-Wmissing-braces -Wnonnull -Wparentheses -Wpointer-sign -Wreorder -Wreturn-type 
-Wsequence-point -Wsign-compare (only in C++) -Wstrict-aliasing 
-Wstrict-overflow=1 -Wswitch -Wtrigraphs -Wuninitialized -Wunknown-pragmas 
-Wunused-function -Wunused-label -Wunused-value -Wunused-variable 
-Wvolatile-register-var

-Wextraに含まれるもの:

-Wclobbered -Wempty-body -Wignored-qualifiers -Wmissing-field-initializers
-Wmissing-parameter-type (C only) -Wold-style-declaration (C only) -Woverride-init
-Wsign-compare -Wtype-limits -Wuninitialized -Wunused-parameter (only with -Wunused
 or -Wall) -Wunused-but-set-parameter (only with -Wunused or -Wall)

明示的に有効にする必要がある警告はさらに多くあります。

例えば。 Cコードには次を使用します。

-Wall -Wextra -Waggregate-return -Wcast-align -Wcast-qual -Wdisabled-optimization -Wdiv-by-zero -Wendif-labels -Wformat-extra-args -Wformat-nonliteral -Wformat-security -Wformat-y2k -Wimplicit -Wimport -Winit-self -Winline -Winvalid-pch -Wjump-misses-init -Wlogical-op -Werror = missing-braces -Wmissing-declarations -Wno-missing-format-attribute -Wmissing-include-dirs -Wmultichar -Wpacked -Wpointer-arith -Wreturn-type -Wsequence-point -Wsign-compare -Wstrict-aliasing -Wstrict-aliasing = 2 -Wswitch -Wswitch-default -Werror = undef -Wno-unused -Wvariadic-macros -Wwrite-strings -Wc ++ -compat -Werror = declaration-after-statement -Werror = implicit-function-declaration -Wmissing-prototypes -Werror = nested-externs -Werror = old-style-definition -Werror = strict-prototypes

または https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html を使用した一連の警告

28
rurban

残念なことに、マニュアルの実際に関連する部分を引用している回答はありません。

これにより、一部のユーザーが疑わしいと考える構成に関するすべての警告が有効になり、マクロと併用しても、簡単に回避(または警告を防止するために変更)できます。

[...]

一部の警告フラグは、-Wallによって暗示されないことに注意してください。それらのいくつかは、ユーザーが一般的に疑わしいとは思わない構造について警告しますが、時々チェックすることを望むかもしれません。また、場合によっては回避が必要または困難な構造について警告するものもあり、コードを変更して警告を抑制する簡単な方法はありません。それらの一部は-Wextraによって有効になりますが、それらの多くは個別に有効にする必要があります。

エルゴ:

  • -Wallnotは「すべての警告」を意味します。
  • また、notは「(ほぼ)すべて」を意味し、ロングショットではありません。
  • それdoesは、個々のオプションのセットを意味しますそれは変更にバインドされています

肝心なのは、設定する必要がある警告の絶対最小値についてです。 -Wall -Wextraの方が優れていますが、コンパイラが実行できるすべてのエラーチェックをまだ使用しているわけではありません。


個人的には-Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual未満にはなりません。私の現在のプロジェクトはすべて、実際にはそれよりも長い警告のリストを使用しています(それらをトリガーすることはありません)。また、新しいオプションについては、メジャーリリースごとにマニュアルを確認します。コンパイラはあなたの友達です。提供できる診断を使用してください。

17
DevSolar

Gccライターがソースで簡単に回避できると思われる警告およびを有効にします。 -W(新しいリリースでは-Wextra)もありますが、これは有用であると考えられますが、回避策の誤検知が困難であるか、コードが不器用になる可能性があります。

gccには他にも多くの警告がありますが、通常はあまり有用ではありません。 http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Warning-Options.html#Warning-Options を参照してください

6
AProgrammer

それはenables most warning messages

g++ --help=warningsを使用すると、詳細を確認できます。

1
Yuval

すべての警告が有効になります。 (「すべて警告」と読みます)

0
Bjorn J