SORU
30 Temmuz 2012, PAZARTESİ


Nasıl'In uyarıları TÜM (gerçekten) açmak için?

-- Gerçekten -- enable etmek istiyorumTÜMGCC uyarıları var. (Çok kolay...) sanırsın

  • -Wall hile yapabilir, ama hayır sanırsın! Hala -Wextra gerekir.

  • -Wextra hile yapabilir, ama hayır sanırsın! Uyarılar here verilmiş (örneğin, -Wshadow) tüm bu tarafından sağlanıyor. Ve ben hala bu liste çok kapsamlı ise hiçbir fikrim yok.

Nasıl etkinleştirmek için GCC söylerim (Eğer, ve, ya ama!)tümsahip uyarıları?

CEVAP
30 Temmuz 2012, PAZARTESİ


Edemezsin.

GCC 4.4.0 için manuel sürüm için kapsamlı sadece, ama 4.4.0 için mümkün olan tüm uyarılara listesi yok. Ama, örneğin bağlantı sayfasında bazı özel Dil Seçenekleri sayfaları C seçenekleri için ya N-C seçenekler üzerinde değiller. Onları bulmak için Options Summary bakmak daha iyidir

Açmaher şeyifloat uygulayan 32 bitlik tek duyarlıklı kayan nokta birimi ile İşlemciler üzerinde sadece ilgili olan -Wdouble-promotion donanım olarak yer alacak, ama yazılım double taklit eder. double olarak yapıyor hesaplamalar yazılım emulasyonu ve daha yavaş olur. Bazı gömülü İşlemciler için uygun değil, ama 64-bit için donanım desteği ile modern masaüstü İşlemciler için tamamen alakasız kayan nokta.

Başka uyarı yok genellikle yararlıdır -Wtraditional, uyarıyor hakkında gayet iyi oluşturulmuş bir kod var farklı bir anlam (ya da çalışmıyor) geleneksel C, örneğin "string " "concatenation" ISO C işlev tanımları! Gerçekten 30 yaşında Derleyiciler ile uyumluluk önemsiyorsun? Gerçekten int inc(int i) { return i 1; } yazmak için bir uyarı ister misin ?

-Weffc yararlı olmak için çok gürültülü olduğunu düşünüyorum, eski ilk baskısı üzerine kuruluEtkili Cve son derece geçerli olan yapıları hakkında uyarır C (ve rehberi kitabı daha sonraki sürümlerde değişti.) Ben olmak istemiyorum uyarıda almadım başlatıldı std::string üye benim kurucu; bir varsayılan kurucu o yaptığını tam olarak ne istiyorum, neden yazayım m_str() Ara? -Weffc uyarılar o yardımcı olur çok zor derleyici için algılamak doğru (vermek yanlış negatif), ve olanları değil yararlı gibi başlatılıyor bütün üyelerine açık bir şekilde, sadece üretmek çok fazla gürültü vererek yanlış pozitif.

Luc Danton neredeyse hiç C kodu için bir anlam ifade eden -Waggregate-return gereksiz uyarı great example bir sağladı.

yani gerçekten istemiyorsuntümuyarılar, bildiğini sanıyorsun.

Manuel geçmesi, onlar hakkında bilgi edinin, etkinleştirmek isteyebilirsiniz karar, onları deneyin. Derleyici El Kitabı okuyor İyi bir ŞeyTMneyse, kestirmeden ve anlamıyorsun uyarılar sağlayarak özellikle RTFM zorunda kalmamak için iyi bir fikir değildir.

Anyone who just turns on everything is probably either doing so because they're clueless because or a pointy-haired boss said "no warnings."

Some warnings are important, and some aren't. You have to be discriminating or you mess up your program. Consider, for instance, -Wdouble-promotion. If you're working on an embedded system you might want this; if you're working on a desktop system you probably don't. And do you want -Wtraditional? I doubt it.

Düzenleme:WONTFIX olarak kapalı olan da 26* *bakın.

Edit 2:yanıt DevSolar şikayetleri makefiles ihtiyacı için kullanmak farklı uyarılara bağlı olarak derleyici sürümü -Wall -Wextra değil uygun değil o zaman zor kullanmak derleyici özgü ve sürüme özgü CFLAGS:

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))

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Emotional Trancer

    Emotional Tr

    4 Mart 2010
  • Jay Will

    Jay Will

    19 NİSAN 2006
  • MattSteffanina 2

    MattSteffani

    28 Kasım 2007