"man gcc" di konsol Anda memberi tahu Anda segalanya tentang bendera ini dan penelusuran Google sederhana dengan "gcc -Wall" juga ...
David Sauter
Sebagai tip umum, cobalah membaca manentri untuk program jika Anda ingin tahu apa yang dilakukan sakelar, atau sakelar apa yang tersedia. The manhalaman gccdapat dibaca pada linux.die.net/man/1/gcc - Anda dapat melakukan pencarian cepat di sana untuk teks "Wall"
gnud
6
@David Sauter, Google tidak akan menemukan apa pun dengan "-wall". Ini akan mengecualikan semua "dinding" dari pencarian.
Kirill V. Lyadvinsky
@Kir Tidak jika Anda menggunakan tanda kutip, seperti saya menebak maksud David
gnud
1
//, Saya selalu berpikir itu adalah penghormatan kepada Larry Wall.
Nathan Basanese
Jawaban:
110
Ini adalah kependekan dari "warn all" - ini menyalakan (hampir) semua peringatan yang dapat diberitahukan oleh g ++ kepada Anda. Biasanya ide yang bagus, terutama jika Anda seorang pemula, karena memahami dan memperbaiki peringatan tersebut dapat membantu Anda memperbaiki berbagai jenis masalah dalam kode Anda.
Lebih banyak peringatan (beberapa di antaranya sangat berguna) dapat diaktifkan dengan -Wextradan -pedantic.
gnud
7
Tidak (hampir) semuanya. Ini sebenarnya hanya sebagian kecil dari peringatan yang tersedia. Itu yang disetujui "semua". The benar-benar ide yang baik adalah untuk melakukan -Wall -Wextra, dan kemudian membaca dengan teliti manual untuk menemukan banyak lebih peringatan Anda bisa mengaktifkan mungkin, karena bahkan -Wextrahanya bagian kecil ...
DevSolar
@Devolar poin yang sangat bagus. Tahukah Anda jika ada bendera yang berarti "secara harfiah semua peringatan"?
MatrixFrog
1
@MatrixFrog: Sayangnya, tidak ada opsi seperti itu, setidaknya tidak untuk kompiler yang saya tahu. Dan daftar peringatan yang tersedia berubah seiring waktu ... jika tim GCC tidak menonaktifkan -Wunreachable-codebeberapa waktu lalu, Apple akan jauh lebih bahagia hari ini. ;-)
DevSolar
36
Lihat man gcc.
-Dinding menyalakan peringatan ini:
-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 berisi:
-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)
Masih banyak lagi peringatan yang harus Anda aktifkan secara eksplisit.
Sayangnya tidak ada jawaban yang mengutip bagian manual yang benar-benar relevan, yang benar-benar membawanya ke suatu titik:
Hal ini memungkinkan semua peringatan tentang konstruksi yang oleh beberapa pengguna dianggap meragukan, dan yang mudah dihindari (atau dimodifikasi untuk mencegah peringatan), bahkan dalam hubungannya dengan makro.
[...]
Perhatikan bahwa beberapa tanda peringatan tidak diimplikasikan oleh -Wall. Beberapa dari mereka memperingatkan tentang konstruksi yang umumnya tidak dianggap meragukan oleh pengguna, tetapi terkadang Anda mungkin ingin memeriksanya; yang lain memperingatkan tentang konstruksi yang perlu atau sulit dihindari dalam beberapa kasus, dan tidak ada cara sederhana untuk mengubah kode untuk menyembunyikan peringatan. Beberapa di antaranya diaktifkan oleh -Wextra
tetapi banyak di antaranya harus diaktifkan secara individual.
Jadi:
-Walltidak tidak berarti "semua peringatan".
Ini juga tidak berarti "(hampir) semua", tidak terlalu jauh.
Ini tidak berarti satu set pilihan individu yang terikat untuk mengubah .
Intinya, ini tentang peringatan minimum absolut yang harus Anda tetapkan. Meskipun -Wall -Wextralebih baik, itu masih belum memanfaatkan semua pengecekan kesalahan yang dapat dilakukan kompiler Anda untuk Anda.
Secara pribadi saya tidak akan pergi kurang dari -Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual. Semua proyek saya saat ini sebenarnya menggunakan daftar peringatan yang lebih panjang dari itu (tanpa memicu salah satu pun). Dan saya memeriksa manual pada setiap rilis utama untuk opsi baru. Kompilator adalah teman Anda. Gunakan diagnostik apa pun yang ditawarkannya kepada Anda.
Saya sudah mulai belajar pemrograman menggunakan C ++. Saya menggunakan prinsip-prinsip pemrograman dan berlatih menggunakan cpp . Sistem saya adalah ubuntu 16.04, saya menggunakan vscode sebagai editor saya. Apakah Anda merekomendasikan saya untuk menggunakan Anda -Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtualsaat saya mengkompilasi g++ -std=c++11sementara saya belajar c ++ dan pemrograman? Atau haruskah saya melewati bagian ini dan mulai menggunakan bendera pesan kesalahan nanti? Jika demikian, kapan saya harus mulai dengan pesan kesalahan?
scientific_explorer
2
@vkv: Saya percaya bahwa kompilator benar-benar adalah teman Anda, dan Anda harus memanfaatkan setiap nasihat bagus yang dapat diberikannya.
DevSolar
6
Ini mengaktifkan peringatan yang dianggap berguna dan mudah dihindari pada sumbernya oleh penulis gcc. Ada juga -W (-Wextra dalam rilis yang lebih baru) yang dianggap berguna tetapi untuk mengatasi kesalahan positif bisa jadi sulit atau menghasilkan kode yang kikuk.
Untuk gcc doc: "Beberapa pengguna mencoba menggunakan -pedantic untuk memeriksa program untuk kesesuaian ISO C yang ketat. Mereka segera menemukan bahwa ia tidak melakukan apa yang mereka inginkan: ia menemukan beberapa praktik non-ISO, tetapi tidak semua — hanya yang itu ISO C membutuhkan diagnostik, dan beberapa lainnya yang telah ditambahkan diagnostiknya. "
Pemrogram
Itu tidak memberikan jaminan 100%, tapi itu membantu.
Kirill V.Lyadvinsky
1
Jika Anda tidak menulis beberapa, bukan semua di "untuk memperingatkan tentang semua bagian yang tidak sesuai", saya tidak akan berkomentar. Tetapi formulasi Anda saat ini hanya menyebarkan kesalahpahaman yang diperingatkan oleh dokumentasi gcc.
Pemrogram
Tetap. Namun dalam praktiknya, ini terlihat seperti "sebagian besar" dan bukan "sebagian".
man
entri untuk program jika Anda ingin tahu apa yang dilakukan sakelar, atau sakelar apa yang tersedia. Theman
halamangcc
dapat dibaca pada linux.die.net/man/1/gcc - Anda dapat melakukan pencarian cepat di sana untuk teks "Wall"Jawaban:
Ini adalah kependekan dari "warn all" - ini menyalakan (hampir) semua peringatan yang dapat diberitahukan oleh g ++ kepada Anda. Biasanya ide yang bagus, terutama jika Anda seorang pemula, karena memahami dan memperbaiki peringatan tersebut dapat membantu Anda memperbaiki berbagai jenis masalah dalam kode Anda.
sumber
-Wextra
dan-pedantic
.-Wall -Wextra
, dan kemudian membaca dengan teliti manual untuk menemukan banyak lebih peringatan Anda bisa mengaktifkan mungkin, karena bahkan-Wextra
hanya bagian kecil ...-Wunreachable-code
beberapa waktu lalu, Apple akan jauh lebih bahagia hari ini. ;-)Lihat man gcc.
-Dinding menyalakan peringatan ini:
-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 berisi:
-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)
Masih banyak lagi peringatan yang harus Anda aktifkan secara eksplisit.
Misalnya untuk kode C kami, kami menggunakan:
-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 = tanda kurung hilang -Wmissing-declarations -Wno-missing-format-attribute -Wmissing-include-dirs -Wmultichar -Wpacked -Wpointer-arith -Wreturn-type -Wsequence-point -Wsign-bandingkan -Wstrict-aliasing -Wstrict-aliasing = 2 -Wswitch -Wswitch-default -Werror = undef -Wno-unused -Wvariadic-macros -Write-strings -Wc ++ -compat -Werror = declaration-after-statement -Werror = implicit-function-declaration -Wmissing-prototypes -Werror = nested-externs -Werror = old-style-definition -Werror = strict-prototypes
atau hanya sekumpulan peringatan dengan https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html
sumber
Sayangnya tidak ada jawaban yang mengutip bagian manual yang benar-benar relevan, yang benar-benar membawanya ke suatu titik:
Jadi:
-Wall
tidak tidak berarti "semua peringatan".Intinya, ini tentang peringatan minimum absolut yang harus Anda tetapkan. Meskipun
-Wall -Wextra
lebih baik, itu masih belum memanfaatkan semua pengecekan kesalahan yang dapat dilakukan kompiler Anda untuk Anda.Secara pribadi saya tidak akan pergi kurang dari
-Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual
. Semua proyek saya saat ini sebenarnya menggunakan daftar peringatan yang lebih panjang dari itu (tanpa memicu salah satu pun). Dan saya memeriksa manual pada setiap rilis utama untuk opsi baru. Kompilator adalah teman Anda. Gunakan diagnostik apa pun yang ditawarkannya kepada Anda.sumber
-Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual
saat saya mengkompilasig++ -std=c++11
sementara saya belajar c ++ dan pemrograman? Atau haruskah saya melewati bagian ini dan mulai menggunakan bendera pesan kesalahan nanti? Jika demikian, kapan saya harus mulai dengan pesan kesalahan?Ini mengaktifkan peringatan yang dianggap berguna dan mudah dihindari pada sumbernya oleh penulis gcc. Ada juga -W (-Wextra dalam rilis yang lebih baru) yang dianggap berguna tetapi untuk mengatasi kesalahan positif bisa jadi sulit atau menghasilkan kode yang kikuk.
gcc juga memiliki banyak peringatan lain, yang umumnya kurang berguna. Lihat http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Warning-Options.html#Warning-Options
sumber
Itu
enables most warning messages
.Anda dapat mengetahui lebih lanjut jika Anda menggunakan
g++ --help=warnings
.sumber
Ini memungkinkan semua peringatan. (dibaca sebagai "Peringatkan Semua")
sumber
-Wall
hanya berarti "sebagian besar peringatan" daripada "semua peringatan".Ini menunjukkan semua peringatan. Saya juga merekomendasikan penggunaan
-pedantic
untuk memperingatkan tentang beberapa bagian kode yang tidak sesuai.sumber