TÜM GCC'nin uyarılarını nasıl (tam anlamıyla) açabilirim?


194

Tam anlamıyla GCC'nin sahip olduğu TÜM uyarıları etkinleştirmek istiyorum . (Kolay olacağını düşünürdün ...)

  • -WallHile yapabileceğini düşünürsün , ama hayır! Hala ihtiyacım var -Wextra.

  • -WextraHile yapabileceğini düşünürsün , ama hayır! Burada listelenen tüm uyarılar (örneğin, -Wshadow) bunun tarafından etkinleştirilmez. Ve bu listenin kapsamlı olup olmadığı konusunda hala bir fikrim yok.

GCC'ye sahip olduğu tüm uyarıları etkinleştirmesini nasıl söyleyebilirim ?


27
@Arafangion: Soru hakkında "belirsiz" olanı anlamıyorum - evet, ne kadar bilgiç olursa olsun, kodum için geçerli olan tüm uyarıları açmak istiyorum . Nedeni gelince, çok basit: yardımcı olmak için -Wall veya -Wextra tarafından açılmayan bazı uyarıları buldum ve bu yüzden kodumu geliştirmek olup olmadığını görmek için geri kalanı denemek istiyorum. Bu kadar basit.
user541686

12
@JoachimPileborg: "Derleyicinin ne hakkında uyarmasını istiyorsun?" Olası hatalar ve / veya bozuk stil? Yani, tüm uyarıları bilseydim, bunları manuel olarak açardım, soruyu sormaya gerek yok. Cevap gerçekten "hepsini bulmak için kaynak koduna bakmak zorunda" ise o zaman cevap olarak gönderin!
user541686

56
clang 3.1 sunuyor -Weverything.
Alexandre Hamez

5
@Arafangion Peki, soru C ++ etiketli yani ... :)
Bazı programcı dostum

5
@JoachimPileborg Ve şimdi (nihayet) uyarıları kaynaktan almanın otomatik bir yolu var: github.com/barro/compiler-warnings
Kyle Strand

Yanıtlar:


130

Yapamazsın.

GCC 4.4.0 kılavuzu sadece bu sürüm için kapsamlı olmakla birlikte, 4.4.0 için olası tüm uyarıları listelemektedir. Hepsi bağlantı verdiğiniz sayfada değil, örneğin C ++ seçenekleri veya Obj-C seçenekleri için sayfalarda dile özgü bazı seçenekler var. Hepsini bulmak için Seçenekler Özeti'ne bakmanız daha iyi

Açılması her şeyi içerecek -Wdouble-promotionbir 32 bit tek duyarlıklı kayan nokta birimine uygular ile CPU'lar üzerinde sadece ilgili olan floatdonanım, ama öykünür doubleyazılım. doubleYazılım öykünmesini kullanacağı gibi hesaplamalar yapmak ve daha yavaş olmak. Bu, bazı gömülü CPU'lar için geçerlidir, ancak 64 bit kayan nokta için donanım desteğine sahip modern masaüstü CPU'lar için tamamen önemsizdir.

Genellikle kullanışlı olmayan bir diğer uyarı, -Wtraditionalgeleneksel C, örneğin "string " "concatenation"veya ISO C işlev tanımlarında farklı bir anlamı olan (veya çalışmayan) mükemmel şekilde oluşturulmuş kod hakkında uyarır ! 30 yıllık derleyicilerle uyumluluğa gerçekten önem veriyor musunuz? Gerçekten yazmak için bir uyarı ister misiniz int inc(int i) { return i+1; }?

-Weffc++Yararlı olmak için çok gürültülü olduğunu düşünüyorum , Etkili C ++ 'ın eski ilk baskısına dayanır ve mükemmel geçerli C ++ (ve kitabın sonraki sürümlerinde kuralların değiştiği yapılar) hakkında uyarır. yapıcıma std::stringüye atamadığım konusunda uyardı ; tam olarak istediğimi yapan varsayılan bir kurucu var, neden m_str()çağırmak için yazmalıyım ? -Weffc++Yararlı olacaktır uyarılar derleyici doğru (yanlış negatifler vererek) tespit etmek için çok zordur ve bu açıkça tüm üyelerini başlatılıyor kadar yararlı olmayan olanlar, sadece yanlış pozitif vererek fazla gürültü çok üretirler.

Luc Danton , C ++ kodu için neredeyse hiç mantıklı olmayan işe yaramaz uyarılara harika bir örnek verdi-Waggregate-return .

yani tüm uyarıları gerçekten istemezsiniz , sadece yaptığınızı düşünürsünüz.

Kılavuzu gözden geçirin, bunları okuyun, hangisini etkinleştirmek istediğinize karar verin, deneyin. Derleyicinizin el kitabını okumak yine de Good Thing TM , kısa yol almak ve anlamadığınız uyarıları etkinleştirmek çok iyi bir fikir değil, özellikle RTFM'den kaçınmak için.

Her şeyi açan herkes muhtemelen ya clueless çünkü ya da sivri saçlı bir patron "uyarı yok" dedi.

Bazı uyarılar önemlidir, bazıları değildir. Ayrımcı olmanız veya programınızı bozmanız gerekir. Örneğin, düşünün -Wdouble-promotion. Gömülü bir sistem üzerinde çalışıyorsanız bunu isteyebilirsiniz; bir masaüstü sistemi üzerinde çalışıyorsanız muhtemelen kullanmıyorsunuzdur. Ve istiyor -Wtraditionalmusun? Şüpheliyim.

Düzenleme: Ayrıca WONTFIX olarak kapatılmış tüm uyarıları etkinleştirmek için -Wall -all bölümüne bakın .

Düzenleme 2: DevSolar'ın derleyici sürümüne bağlı olarak farklı uyarılar kullanması gereken markalarla ilgili şikayetine yanıt olarak, -Wall -Wextrauygun değilse , derleyiciye özgü ve sürüme özgü CFLAGS kullanmak zor değildir:

compiler_name := $(notdir $(CC))
ifeq ($(compiler_name),gcc)
compiler_version := $(basename $(shell $(CC) -dumpversion))
endif
ifeq ($(compile_name),clang)
compiler_version := $(shell $(CC) --version | awk 'NR==1{print $$3}')
endif
# ...
wflags.gcc.base := -Wall -Wextra
wflags.gcc.4.7 := -Wzero-as-null-pointer-constant
wflags.gcc.4.8 := $(wflags.gcc.4.7)
wflags.clang.base := -Wall -Wextra
wflags.clang.3.2 := -Weverything
CFLAGS += $(wflags.$(compiler_name).base) $(wflags.$(compiler_name).$(compiler_version))

38
"Kılavuzu inceleyin, okuyun, hangilerini etkinleştirmek istediğinize karar verin, deneyin." Buradaki sorun, attığınız adımlar: "Her derleyici sürümü için kılavuzu yeniden ziyaret edin ve uyarı listenizi değiştirdikleri için uyarlayın. Makefiles'ınızın tam derleyici sürümünü kontrol etmesini ve farklı bir uyarı listesi kullanmasını sağlayın her biri için. " Sürekli bakım optimizasyon seviyelerine sahibiz; neden uyarılar için aynı hizmeti vermekle uğraşmadılar?
DevSolar

17
@JonathanWakely: Ben benim projeleri ve GCC aralarında değil. Üründe bir zayıflığa işaret ediyorum. Ya düzeltirler ya da suçu kabul etmedikleri için kabul ederler, ama onlar için düzeltmek bana bağlı değildir, OSS lanet olsun.
DevSolar

14
@JonathanWakely: "Bir şey istiyorsan, sor, orospu yapma." - GCC projesine eleştirmek için katılmak zorunda değilim, özellikle # 31573 zaten WONTFIX olarak işaretlenmişse. Bu, "konuyu sor" dan "orospu çocuğu" basketbol sahasına koyar.
DevSolar

61
-Weverythingbence, böyle bir seçenek vermemek gibi gcc stratejisinden daha iyi bir çözümdür. Bu bayrağı clang ile kullanıyorum çünkü felsefem varsayılan olarak tüm uyarıları istemem (çünkü derleyiciye eklemenin yeterince yararlı olduğunu düşündüğü için) ve hoşuma gitmezse, bu uyarıyı özellikle kapatıyorum. Mesele şu ki, tetiklemeyen uyarıları bilmiyorsunuz, ancak tetiklemesini istemediğiniz uyarıları biliyorsunuz ve bunlar kolayca kapatılıyor.
David Stone

17
@JonathanWakely Evet, ama önemsiz. Hangi uyarıların kodunuzla alakalı olabileceğini görmenin en kolay yolu, hangi uyarıların kodunuz tarafından tetiklendiğini görmektir ; bu noktada, uyarıyı devre dışı bırakıp bırakmayacağınıza karar vermeden önce potansiyel olarak tehlikeli kodun ilgili, gerçek hayattan bir örneğini görebilirsiniz. Bu, Clang'ın -Weverythingseçeneği ile kolayca yapılabilir , ancak GCC ile yapmak imkansızdır.
Kyle Strand

71

Önceki cevapları, kelimenin tam anlamıyla tüm uyarıları etkinleştirmenin muhtemelen yararlı olmadığını kabul ediyorum, ancak GCC bunu başarmak için makul derecede uygun bir yol sunuyor. Komuta

gcc -Q --help=warning

etkin olup olmadıklarına ilişkin bilgileri içeren tüm desteklenen uyarı seçeneklerinin bir listesini sağlar. Bu arada bu kutu seçenekleri ör olarak etkin (değil) Hangi bulmak için kullanılabilir -Wallve-Wextra

gcc -Wall -Wextra -Q --help=warning

Tüm uyarıları etkinleştirmek için komut satırı parametrelerini ayıklamak üzere bazı normal ifadeleri kullanabilirsiniz

gcc -Q --help=warning | sed -e 's/^\s*\(\-\S*\)\s*\[\w*\]/\1 /gp;d' | tr -d '\n'

Mevcut GCC için bu verir:

-Wabi -Wabi-etiketi -Waddress -Waggregate-return -Wagign-loop-optimizations -Waliasing -Walign-commons -Wampersand -Warray-bounds -Warray-temporaries -Wassign-intercept -Wattributes -Wbad-işlev-döküm -Wbool-karşılaştır -Wbuiltin-makro-yeniden tanımlanmış -Wc ++ - uyumlu -Wc ++ 0x-uyumlu -Wc ++ 14-uyumlu -Wc-bağlama-tipi -Wc90-c99-uyumlu -Wc99-c11-compat -Wcast-align -Wcast-qual -Wchar-abonelikleri -Wcharacter-truncation -Wchkp -Wclobbered -Wcomment -Wcompare-reals -Wconditionally destekli -Wconversion -Wconversion-extra -Wconversion-null -Wcoverage-mismatch -Wcpp -Wctor-dtor-privacy -Wdate-time -Wdate-time -Wdeclation -after-deyimi -Wdelete-eksik -Wdelete-sanal olmayan-dtor -Wdeprecated -Wdeprecated-bildirimler -Wdesignated-init -Wdisabled-optimization -Wdiscarded-dizi-niteleyiciler -Wdiscarded-niteleyiciler -Woded-init -Wdisabled-optimization -Wdiscarded-dizi-niteleyiciler -Wdiscarded-niteleyiciler -Weffc ++ -Wempty-gövde-Wendif-etiketleri -Wenum-karşılaştır -Wextra -Wfloat-eşit -Wformat-içerir-nul -Wformat-extra-args -Wformat-literal -Wformat-güvenlik -Wformat-imza -Wformat-y2k -Wformat-sıfır uzunluk -Wfree -nonheap-object -Wfunction-elimination -Wignored-niteleyiciler -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wimplicit-interface -Wimplicit-yordamı -Wincompatible-pointer-types -Winherited-variadic-ctor -Winit-self -Winline -Kış-dönüşüm -Kış-işaretçi-döküm-Kış-gölge-Wintrinsics-std -Winvalid-bellek-modeli -Winvalid-offsetof -Winvalid-pch -Wjump-misses-init -Wline-truncation -Wliteral-sonek -Wlogical -not-parantez -Wlogical-op -Wlong-long -Wmain -Wmaybe-başlatılmamış -Wmemset-transpozed-args -Wmissing-braces -Wmissing-bildirimleri -Wmissing-field-başlatıcılar -Wmissing-include-dirs -Wmissing-parametre-type -Wmissing-prototipler-Wmultichar -Wnarrowing -Wnested-externs -Wnoexcept -Wnon-şablon-arkadaş -Wnon-sanal-dtor -Wnonnull -Wodr -Wold-tarzı-döküm -Wold-tarzı-bildirimi -Wold-tarzı-tanım -Wopenmp-simd -Woverflow -Genişlik-dizeler -Genel Yüklü-sanal -Woverride-init -Wpacked -Wpacked-bitfield-uyumlu -Wpadded -Wparentheses -Wpedantic -Wpmf-dönüşümleri -Wpointer-arith -Wpointer-sign -Wpointer-to-int-Cast -Wpragmas -Wproperty -ignign-default -Wprotocol -Wreal-q-sabiti -Wrealloc-lhs -Wrealloc-lhs-all -Wredundant-decls -Wreorder -Wreturn-local-addr -Wreturn-type -Wselector -Wsequence-point -Wshadow -Wshadow-ivar -Wshift-count-negatif -Wshift-count-taşma -Wsign-karşılaştır -Wsign-promo -Wsized-deallocation -Wsizeof-array-argüman -Wsizeof-pointer-memaccess -Wstack-koruyucu -Wstrict-null-sentinel -Wstrict-prototipler -Wstrict-seçici-maç-Wsuggest-attribute = const -Wsuggest-attribute = biçim -Wsuggest-niteliği = noreturn -Wsuggest-niteliği = saf -Wsuggest-final-yöntemleri -Wsuggest-final-türleri -Wsuggest-geçersiz kılma -Wsurprising -Wswitch -Wswitch-bool -Wswitch -default -Wswitch-enum -Wsync-nand -Wsynth -Wsystem-başlıkları -Wtabs -Wtarget-ömür -Wtraditional -Wtraditional-conversion -Wtrampolines -Wtrigraphs -Wtype-limit -Wundeclared-selector -Wundef -Wundergun -Bağlantısız -Wunsafe-loop-optimizations -Wunsuffixed-float-sabitleri -Wunused -Wunused-but-set-parametre -Wunused-but-set-değişken -Wunused-dummy-argüman -Wunused-function -Wunused-label -Wunused-local-typedefs -Wunused-makrolar -Wunused-parametre -Wunused-sonuç -Wunused-value -Wunused-değişken -Sadece-olmadan-Wuseeless-cast -Wvarargs -Wvariadic-makrolar -Wvector-işlem-performans -Wvirtual-move-ata-Wvla -Wvolatile-register-var -Wwrite-strings -Wzero-as-null-pointer-sabiti -Wzerotrip -frequire-return-deyimi

Bu artık GCC'yi çağırmak için kullanılabilir, yani

gcc $(gcc -Q --help=warning | sed -e 's/^\s*\(\-\S*\)\s*\[\w*\]/\1 /gp;d' | tr -d '\n')

Ancak bunun, yalnızca belirli diller için kullanılabilen bazı uyarı seçeneklerinden (örn. C++) Dolayı uyarılara yol açtığını unutmayın . Bunlardan yalnızca geçerli dil için izin verilen seçenekleri dahil etmek için biraz daha normal ifade kullanarak veya -Wno-whateveraramanın sonuna uygun bir ekleyerek bunlardan kaçınılabilir .


10
Korkarım pratik değil. Gcc bana std lib'den gelen uyarıları gösterdi.
Valentin Heinitz

13
@ValentinHeinitz Dediğim gibi tam anlamıyla tüm uyarıları etkinleştirmenin yararlı olduğunu düşünmüyorum, ama OP'nin istediği buydu. Bununla birlikte, diğer cevaplarda daha önce bahsedilen bazı sorunlu uyarıları açıkça kaldırarak (örneğin, aramanın sonuna ilgili -Wno-what ekleyerek), bu pratik kullanımda olabilir.
Haatschii

6
@ValentinHeinitz İlgili dizinler -isystemyerine gcc'nin sistem / std / 3. taraf üstbilgileri için uyarı vermesini engelleyebilirsiniz -I.
Kyle Strand

4
Bu kabul edilen cevap olmalıdır, çünkü bu aslında ve doğrudan soruyu cevaplar.
TFuto

16

Tüm uyarıları etkinleştirerek programlamak imkansızdır (bunları yoksayacaksınız, ancak neden rahatsız oluyorsunuz?). Örneğin, diyelim ki bayraklar set aşağıdaki kullanmak varsayalım: -Wstrict-prototypes -Wtraditional.

İki uyarı etkinleştirilmiş olsa bile, aşağıdaki program şikayetçi olacaktır.

/tmp $ cat main.c 
int main(int argc, char **argv) {
    return 0;
}
/tmp $ gcc -Wstrict-prototypes -Wtraditional main.c 
main.c: In function main’:
main.c:1:5: warning: traditional C rejects ISO C style function definitions [-Wtraditional]
 int main(int argc, char **argv) {
     ^

"Eski tarz prototipleri kullanacağım" diye düşünebilirsiniz. Hayır, bu işe yaramaz.

/tmp $ cat main.c 
int main(argc, argv)
    int argc;
    char **argv;
{
    return 0;
}
/tmp $ gcc -Wstrict-prototypes -Wtraditional main.c 
main.c:1:5: warning: function declaration isnt a prototype [-Wstrict-prototypes]
 int main(argc, argv)
     ^

Ve hayır, herhangi bir prototip belirtmemek de yanlıştır, çünkü derleyici de şikayet edecektir.

/tmp $ cat main.c 
int main() {
    return 0;
}
/tmp $ gcc -Wstrict-prototypes -Wtraditional main.c 
main.c:1:5: warning: function declaration isnt a prototype [-Wstrict-prototypes]
 int main() {
     ^

Programınızın içinde herhangi bir işlev tanımlarsanız, tüm bayrakları kullanamazsınız, çünkü derleyici akla gelebilecek herhangi bir işlev tanımından şikayetçi olacaktır.

C ++ için bu mümkündür ( -Wtraditionalbayrak mevcut değildir) ve çok basit programlar derlenebilir. Tüm uyarıları etkinleştirmek için aşağıdaki uyarı listesini kullanın (tarafından etkinleştirilen uyarılara filtre uygulama zahmetine girmediğim için muhtemelen bazı uyarılar çoğaltılır -Wall).

-Wabi -Wctor-dtor-privacy -Wnon-virtual-dtor -Wreorder -Weffc++ -Wstrict-null-sentinel -Wno-non-template-friend -Wold-style-cast -Woverloaded-virtual -Wno-pmf-conversions -Wsign-promo -Wextra -Wall -Waddress -Waggregate-return -Warray-bounds -Wno-attributes -Wno-builtin-macro-redefined -Wc++0x-compat -Wcast-align -Wcast-qual -Wchar-subscripts -Wclobbered -Wcomment -Wconversion -Wcoverage-mismatch -Wno-deprecated -Wno-deprecated-declarations -Wdisabled-optimization -Wno-div-by-zero -Wempty-body -Wenum-compare -Wno-endif-labels -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral -Wformat-security -Wformat-y2k -Wignored-qualifiers -Winit-self -Winline -Wno-int-to-pointer-cast -Wno-invalid-offsetof -Winvalid-pch -Wunsafe-loop-optimizations -Wlogical-op -Wlong-long -Wmain -Wmissing-braces -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs -Wmissing-noreturn -Wno-mudflap -Wno-multichar -Wnonnull -Wno-overflow -Woverlength-strings -Wpacked -Wpacked-bitfield-compat -Wpadded -Wparentheses -Wpointer-arith -Wredundant-decls -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wsign-conversion -Wstack-protector -Wstrict-aliasing=1 -Wstrict-overflow=5 -Wswitch -Wswitch-default -Wswitch-enum -Wsync-nand -Wsystem-headers -Wtrigraphs -Wtype-limits -Wundef -Wuninitialized -Wunknown-pragmas -Wno-pragmas -Wunreachable-code -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wvariadic-macros -Wvla -Wvolatile-register-var -Wwrite-strings

13
Şimdiye kadar bunu kontrol etmek için hiç uğraşmadım, ama aslında imkansız değil ... deneint main(int, char **); int main(argc, argv) int argc; char **argv; { (void)argc; (void)argv; return 0; }
user541686

2
Bu önemsiz programla bile hala "uyarı: yığın kullanımı 16 bayttır [-Wstack-usage =]" ;-)
Marc Glisse

7

Birisi, belirli bir GCC veya Clang sürümü için tüm uyarı kümesini belirlemek için bir dizi araç oluşturdu .

GCC için, derleyici sürümünüz için bu araç tarafından sağlanan uyarıların tam listesinden kopyalamak, (Clang'ın aksine) GCC'nin sağlamadığı için tüm uyarıların açık olmasını sağlamanın tek yolu gibi görünmektedir .-Weverything

Araç c.opt, GCC kaynak kodundaki gerçek dosyayı ayrıştırıyor gibi göründüğünden , sonuçları kesin olmalıdır .

Depo ayrıca çoğu GCC ve Clang sürümü için oluşturulmuş uyarı listelerine sahip metin dosyaları içerir (şu anda Clang 3.2 ila 3.7 ve GCC 3.4 ila 5.3).

https://github.com/barro/compiler-warnings


İşte cevap. "Üst düzey" listesini kullanın ve üst düzeydeki (girintili / iç içe olmayan) tüm bağımsız değişkenleri ekleyin. github.com/Barro/compiler-warnings/blob/master/gcc/…
Jetski S-tipi

6

Gcc 4.3+ artık -Q --help = uyarılarına sahip, sadece C ile ilgili uyarıları yazdırmak için --help = warnings, C belirtebilirsiniz.

Bundan yararlanmak için sadece bir m4 modülü yazdım (ayrıca clang -Weverything'i de destekler), bkz. Wget_manywarnings.m4

Kullanımı oldukça basittir, temelde modül her uyarı bayrağını açar. Ve uyarıları gerektiği gibi kaldırırsınız - bazıları gerçekten çok ayrıntılıdır. Örnek: configure.ac

Otomatik araçları kullanmazsanız, temelde awk üzerinden yapılan gcc çağrısı olan m4 modülündeki tüm devre dışı uyarıları açmak için kodu bulacaksınız:

flags="-Wall -Wextra -Wformat=2 "$(gcc -Wall -Wextra -Wformat=2 -Q --help=warning,C|awk '{ if (($2 == "[disabled]" || $2 == "") && $1!~/=/ && $1~/^-W/&& $1!="-Wall") print $1 }'


3

Gönderen bu sayfada :

Bazı uyarı bayraklarının ima edilmediğini unutmayın -Wall. Bazıları, kullanıcıların genellikle şüpheli olduğunu düşünmediği, ancak zaman zaman kontrol etmek isteyebileceğiniz inşaatlar hakkında uyarır; diğerleri ise bazı durumlarda kaçınılması gereken veya zor olan inşaatlar konusunda uyarırlar ve uyarıyı bastırmak için kodu değiştirmenin basit bir yolu yoktur. Bazıları tarafından etkinleştirilir, -Wextraancak birçoğunun ayrı ayrı etkinleştirilmesi gerekir.

Sanırım soru hangileri ? Belki olabilir grep -W ile başlayan tüm hatlar için o sayfayı ve uyarı bayrakları tam bir listesini almak. Sonra altında listelerden olanlar karşılaştırmak -Wallve -Wextra. Ayrıca, -Wpedanticdaha da bilgiç olmak istiyorsan yine de =)


"Ve bu listenin kapsamlı olup olmadığı konusunda hala bir fikrim yok" ... evet, kesinlikle bu sayfayı grep olabilir, ama soru şu ki, kapsamlı mı?
user541686

1
Bilmiyorum ... GCC kaynak kodunu dökmeniz gerekebilir. Bir programcı olarak hayatınızı fazlasıyla zorlaştırmaya mı çalışıyorsunuz, yoksa akla gelebilecek her uyarıyı görmek için iyi bir neden var mı? =)
Çeltik

2
GCC'nin kodumu tanılamasını görmek istiyorum - gerçekten yararlı olduğunu düşünüyorum. Ama açıkçası, eğer tüm uyarıları ve hangilerinin yararlı olduğunu (ve hangilerinin işe yaramadığını) zaten biliyorsam , o zaman soracak hiçbir şey olmazdı. Onları denemedikçe söylemem için gerçek bir yol yok (ve örneğin gölgelendirmeyi yararlı bulduğum için, sadece kapalı oldukları için işe yaramaz gibi değiller).
user541686

3

Ve bu listenin kapsamlı olup olmadığı konusunda hala bir fikrim yok.

Muhtemelen öyle, ancak% 100 kapsamlı olan tek liste derleyici için gerçek kaynaktır. Ancak, GCC büyük ! Ve tüm komut satırı parametrelerinin tek bir yerde toplanıp toplanmadığını veya birkaç kaynak dosyaya yayılmış olup olmadığını bilmiyorum. Ayrıca, bazı işlemcilerin ön işlemci için, bazılarının gerçek derleyici için ve bazılarının da (tamamen ayrı bir programdır ve binutils paketinde bulunur) için olduğunu ve bu nedenle büyük olasılıkla yayıldığını unutmayın.


3
Cevabımdaki tüm seçenekleri tek bir sayfada gruplayan Seçenekler Özeti sayfasına bağlandım . GCC kod inceleme politikaları dokümantasyon olmadan yeni seçeneklere izin vermediğinden dokümanlar kapsamlı olmalıdır.
Jonathan Wakely
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.