-o mengubah nama file keluaran (saya menemukan itu menggunakan --help)
Tapi saya tidak tahu apa yang -Wall
dilakukannya?
-o mengubah nama file keluaran (saya menemukan itu menggunakan --help)
Tapi saya tidak tahu apa yang -Wall
dilakukannya?
man
entri untuk program jika Anda ingin tahu apa yang dilakukan sakelar, atau sakelar apa yang tersedia. The man
halaman gcc
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.
-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
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:
-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.
-Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual
saat saya mengkompilasi g++ -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
Ini memungkinkan semua peringatan. (dibaca sebagai "Peringatkan Semua")
-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.