-o çıktı dosya adını değiştirir (--help kullanarak buldum)
Ama ne olduğunu bulamıyorum -Wall
?
-o çıktı dosya adını değiştirir (--help kullanarak buldum)
Ama ne olduğunu bulamıyorum -Wall
?
man
bir anahtarın ne yaptığını veya hangi anahtarların mevcut olduğunu öğrenmek istiyorsanız programların girişlerini okumayı deneyin . man
Sayfa gcc
okunabilen linux.die.net/man/1/gcc - metin "-Wall" için hızlı bir arama var yapabileceği
Yanıtlar:
"Hepsini uyar" ın kısaltması - g ++ 'nın size söyleyebileceği (neredeyse) tüm uyarıları açar. Genelde iyi bir fikir, özellikle de yeni başlayan biriyseniz, çünkü bu uyarıları anlamak ve düzeltmek, kodunuzdaki birçok farklı türde sorunu çözmenize yardımcı olabilir.
-Wextra
ve -pedantic
.
-Wall -Wextra
ve sonra elle incelemek birçok olarak bulmak için daha bile, çünkü mümkün olduğunca olanak verebilir uyarılar -Wextra
... sadece küçük bir alt kümesidir
-Wunreachable-code
bir süre önce devre dışı bırakmasaydı , Apple bugünlerde çok daha mutlu olurdu . ;-)
Man gcc'ye bakın.
-Wall şu uyarıları açar :
-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 şunları içerir:
-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)
Açıkça açmanız gereken daha birçok uyarı var.
Örneğin, kullandığımız C kodumuz için:
-Wall -Wextra -Waggregate-return -Wcast-align -Wcast-qual -Wdisabled-optimizasyon -Wdiv-by-zero -Wendif-etiketleri -Wformat-extra-args -Wformat-nonliteral -Wformat-security -Wformat-y2k -Wimplicit -Wimport -Winit-self -Winline -Winvalid-pch -Wjump-misses-init -Wlogical-op -Werror = eksik-parantez -Wmissing-bildirimleri -Wno-eksik-format-özniteliği -Wmissing-include-dirs -Wmultichar -Wpacked -Wpointer-arith -Wreturn-türü -Sıra-noktası -Wsign-karşılaştırma -Kısıtlı-aliasing -Kısıtlı-aliasing = 2 -Wswitch -Wswitch-default -Werror = undef -Wno-kullanılmayan -Wvariadic-makrolar -Write-dizeleri -Wc ++ -compat -Werror = ifade-sonrası-bildirim -Werror = örtük-fonksiyon-bildirimi -Wmissing-prototipleri -Werror = iç içe-dışlar -Werror = eski-stil-tanım -Werror = katı-prototipler
veya yalnızca https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html ile uyarılar kümesi
Ne yazık ki cevapların hiçbiri kılavuzun gerçekte ilgili kısmından alıntı yapmıyor, bu da onu gerçekten bir noktaya getiriyor:
Bu, bazı kullanıcıların şüpheli olduğunu düşündüğü ve makrolarla birlikte bile kaçınılması (veya uyarıyı önlemek için değiştirilmesi) kolay olan yapılarla ilgili tüm uyarıları etkinleştirir.
[...]
Bazı uyarı bayraklarının ile ima edilmediğini unutmayın
-Wall
. Bazıları, kullanıcıların genellikle şüpheli olarak görmedikleri, ancak bazen kontrol etmek isteyebileceğiniz yapılar konusunda uyarıyor; diğerleri bazı durumlarda kaçınılması gereken veya kaçınılması zor olan yapılar hakkında uyarır ve uyarıyı bastırmak için kodu değiştirmenin basit bir yolu yoktur. Bazıları tarafından etkinleştirilmiştir,-Wextra
ancak çoğunun ayrı ayrı etkinleştirilmesi gerekir.
Ergo:
-Wall
yok değil "tüm uyarıları" demek.Sonuç olarak, ayarlamanız gereken mutlak minimum uyarılarla ilgilidir. Daha -Wall -Wextra
iyi olsa da, derleyicinizin sizin için yapabileceği tüm hataları kontrol etmiyor.
Şahsen ben daha azına gitmezdim -Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual
. Mevcut tüm projelerim aslında bundan daha uzun bir uyarı listesi kullanıyor (hiçbirini tetiklemeden). Ve yeni seçenekler için her büyük sürümdeki kılavuzu kontrol ediyorum. Derleyici arkadaşınızdır. Size sunabileceği teşhisleri kullanın.
-Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual
derlerken kendi kendimi kullanmamı önerir misin g++ -std=c++11
? Yoksa bu bölümü atlayıp daha sonra hata mesajı bayraklarını kullanmaya mı başlamalıyım? Eğer öyleyse, hata mesajlarına ne zaman başlamalıyım?
Kaynakta gcc yazarları tarafından yararlı ve kaçınılması kolay görülen uyarıları etkinleştirir . Ayrıca yararlı olduğu düşünülen ancak yanlış pozitiflerin çözümünün zor olabileceği veya beceriksiz bir kodla sonuçlanabileceği -W (daha yeni sürümlerde -Wextra) vardır.
gcc'de, genellikle daha az yararlı olan bir dizi başka uyarı da vardır. Bkz. Http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Warning-Options.html#Warning-Options
Tüm uyarıları gösterir. -pedantic
Kodun bazı uyumlu olmayan kısımları hakkında uyarmak için de kullanmanızı tavsiye ederim .