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-promotion
bir 32 bit tek duyarlıklı kayan nokta birimine uygular ile CPU'lar üzerinde sadece ilgili olan float
donanım, ama öykünür double
yazılım. double
Yazı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ı, -Wtraditional
geleneksel 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 -Wtraditional
musun? Şü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 -Wextra
uygun 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))