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


92

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

しかし、私は何をするのか分かり-Wallませんか?


7
あなたのコンソール上の「男gccが」...だけでなく、あなたにこのフラグと「gccの-Wall」とシンプルなGoogle検索のすべてを伝えます
デヴィッド・ザウター

一般的なヒントとして、manスイッチの機能や使用可能なスイッチを知りたい場合は、プログラムのエントリを読んでみてください。のmanページはlinux.die.net/man/1/gccgccで読むことができます-そこでテキスト「-Wall」をすばやく検索できます
gnud 2010年

6
@David Sauter、Googleは「-wall」の付いたものを見つけられません。すべての「壁」が検索から除外されます。
Kirill V. Lyadvinsky 2010年

@Kirill引用符を使用する場合は、Davidの意味を推測しているように、そうではありません
gnud 2010年

1
//、私はいつもそれがラリーウォールへのオマージュだと思っていました。
Nathan Basanese 2015

回答:


110

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


24
(そのうちのいくつかはかなり便利です)その他の警告がでオンにすることが可能-Wextra-pedantic
gnud 2010年

7
それは(ほとんど)すべてではありません。実際には、利用可能な警告のごく一部にすぎません。それは「すべて」が同意するものです。本当に良いアイデアが行うことです-Wall -Wextra、その後、マニュアル閲覧数だけ見つけるために、より多くさえあるため、あなたは可能性として有効でした警告-Wextra...小さなサブセットのみである
DevSolar

@DevSolar非常に良い点。「文字通りすべての警告」を意味するフラグがあるかどうか知っていますか?
MatrixFrog 2014

1
@MatrixFrog:残念ながら、少なくとも私が知っているコンパイラーには、そのようなオプションはありません。そして、利用可能な警告のリストは時間とともに変化します... GCCチームが-Wunreachable-codeしばらく前に無効にしていなかったとしたら、Appleは最近ずっと幸せになるでしょう。;-)
DevSolar 2014

36

mangccを参照してください。

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

-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 = description-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の一連の警告


19

残念ながら、マニュアルの実際に関連する部分を引用している答えはありません。これにより、実際にポイントになります。

これにより、一部のユーザーが疑わしいと見なし、マクロと組み合わせても簡単に回避(または警告を防ぐために変更)できる構造に関するすべての警告が有効になります。

[...]

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

エルゴ:

  • -Wall「すべての警告」を意味するものではありませ
  • また、ロングショットではなく、「(ほぼ)すべて」を意味するものでもありません
  • これ、変更が必要な個々のオプションのセットを意味します

要するに、それはあなたが設定すべき警告の絶対最小値についてです。一方で-Wall -Wextra優れている、それはまだあなたのために何ができるあなたのコンパイラエラーチェックのすべてを利用していません。


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


私はC ++を使ったプログラミングを学び始めました。私はプログラミングの原則を使用しており、cppを使用して練習しています。私のシステムはubuntu16.04で、エディターとしてvscodeを使用しています。私がc ++とプログラミングを学ん-Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtualでいるg++ -std=c++11間、私がコンパイルしている間、あなたを使うことを私に勧めますか?または、この部分をスキップして、後でエラーメッセージフラグの使用を開始する必要がありますか?もしそうなら、いつエラーメッセージから始めるべきですか?
Scientific_explorer

2
@vkv:コンパイラは本当にあなたの友達だと思います、そしてあなたはそれがあなたに与えることができる良いアドバイスのすべての少しを利用するべきです。
DevSolar 2018年

6

これにより、gccライターがソースで有用かつ回避しやすいと見なされる警告が可能になります。-W(新しいリリースでは-Wextra)もあります。これらは有用と見なされますが、誤検知の回避が困難であるか、コードが不器用になる可能性があります。

gccには他にもたくさんの警告がありますが、一般的にはあまり役に立ちません。http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Warning-Options.html#Warning-Optionsを参照してください


2

それenables most warning messages

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


0

すべての警告を有効にします。(「すべての警告」と読みます)


実際には、有効にしない警告がたくさんあります(仮想メソッドを持つクラスの非仮想dtorなど)。
マークB

Yuvalの答えを参照してください-Wall。「すべての警告」ではなく「ほとんどの警告」を意味します。
haxtraZ

-1

すべての警告が表示されます。-pedanticコードの一部の不適合部分について警告するためにも使用することをお勧めします。


gcc docの場合:「一部のユーザーは、-pedanticを使用して、プログラムがISO Cに厳密に準拠しているかどうかを確認しようとします。すぐに、希望どおりに機能しないことがわかります。ISO以外のプラクティスがいくつか見つかりますが、すべてではありません。 ISO Cには診断が必要であり、診断が追加されたものもあります。」
AProgrammer 2010年

100%の保証はありませんが、役に立ちます。
Kirill V. Lyadvinsky 2010年

1
すべての不適合部分について警告するために」ですべてではなくいくつかを書いていなかったら、私はコメントしなかっただろう。しかし、現在の定式化は、gccドキュメントが警告する誤解を広めるだけです。
AProgrammer 2010年

修繕。しかし実際には、それは「一部」ではなく「大部分」のように見えます。
Kirill V. Lyadvinsky 2010年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.