Objective-C geliştirme için Clang uyarı bayrakları


86

C & Objective-C programcısı olarak, derleyici uyarı bayraklarıyla biraz paranoyaklık yapıyorum.
Genelde, kullandığım derleyici için uyarı işaretlerinin tam bir listesini bulmaya çalışıyorum ve açmamak için gerçekten iyi bir nedenim olmadıkça çoğunu açıyorum.

Kişisel olarak bunun kodlama becerilerini ve potansiyel kod taşınabilirliğini geliştirebileceğini, bazı sorunları önleyebileceğini düşünüyorum, çünkü sizi küçük detaylardan, potansiyel uygulamalardan ve mimarlık sorunlarından haberdar olmaya zorluyor ...

Ayrıca bence deneyimli bir programcı olsanız bile, her gün iyi bir öğrenme aracı.

Bu sorunun öznel kısmı için, bu konuyla ilgili diğer geliştiricileri (özellikle C, Objective-C ve C ++) duymak istiyorum.
Aslında bilgiçlik uyarıları vb. Şeyleri önemsiyor musunuz? Ve eğer evet veya hayır, neden?

Şimdi Objective-C ile ilgili olarak, son zamanlarda tamamen GCC yerine LLVM takım zincirine (Clang ile) geçtim .

Üretim kodumda, genellikle bu uyarı işaretlerini koyarım (bazıları -Wall tarafından ele alınsa bile açıkça):

  • -Duvar
  • -Wbad fonksiyonlu döküm
  • -Wcast hizalama
  • -Wconversion
  • -Wdeclaration-sonrası açıklamada
  • -Wdeprecated-uygulamaları
  • -Wextra
  • -Wfloat-eşittir
  • -Wformat = 2
  • -Wformat-gerçekte olmayan
  • -Wfour-char sabitleri
  • -Wimplicit-atom-özelliklerini
  • -Wmissing-ayraçları
  • -Wmissing-bildirimleri
  • -Wmissing-field-ilklendiriciler
  • -Wmissing formatlı-nitelik
  • -Wmissing-noreturn
  • -Wmissing-prototipler
  • -Wnested-eksterna
  • -Wnewline-EOF
  • -Wold tarzı çözünürlüklü
  • -Woverlength-dizeleri
  • -Wparentheses
  • -Wpointer-arith
  • -Wredundant-decls
  • -Wreturn tip
  • -Wsequence noktalı
  • -Wshadow
  • -Wshorten-64-to-32
  • -Wsign-karşılaştırmak
  • -Wsign dönüşüm
  • -Wstrict-prototipler
  • -Wstrict-seçici-maç
  • -Wswitch
  • -Wswitch varsayılan
  • -Wswitch-enum
  • -Wundeclared seçici
  • -Wuninitialized
  • -Wunknown-pragmas
  • -Wunreachable kod
  • -Wunused fonksiyonlu
  • -Wunused etiketli
  • -Wunused parametreli
  • -Wunused-değeri
  • -Wunused değişken
  • -Wwrite-dizeleri

Diğer geliştiricilerin bu konuda ne söyleyeceklerini duymak istiyorum.

Örneğin, Clang (Objective-C) için belirli bir bayrağını özlediğimi mi düşünüyorsun ve neden?
Yoksa belirli bir bayrağın işe yaramadığını mı düşünüyorsunuz (ya da hiç istenmiyor) ve neden?

DÜZENLE

Soruyu netleştirmek için, -Wallyalnızca birkaç temel uyarı sağladığını unutmayın .
Aslında -Wall, soru ve benim sunduğum liste tarafından kapsanmayan çok daha fazla uyarı bayrağı var .


9
Bunun muhtemelen Stack Overflow'da kalması gerektiğini söylemeye cazip geliyorum, çünkü bu araç kullanımıyla ilgili bir soru. Ancak topluluğun nasıl sallandığını göreceğiz.
Adam Lear

Yorumun için teşekkürler:) Bir anlamda, sana katılıyorum ve bu yüzden bunu aslında StackOverflow'a gönderdim (ayrıca burada normal bir kullanıcı olmadığım için, bana utanıyorum). Görüşler, çok fazla oy vb. Var ... Ama tek bir cevap değil ... Ve insanların onu taşımayı önerdiği gibi ... Bakalım bakalım
:)

Umarım sana iyi bir cevap verebiliriz. İyi şanslar. :)
Adam Lear

C ve gcc için, -Wwrite-stringsonu çok benzer fakat tam olarak C olmayan bir dil derleyici yapar. Bu nedenle, sadece bu seçeneği kullanmıyorum. Belirlediklerinizden başka, ben -pedantic -Wstrict-overflow=5 -Winline -Wundef -Wcast-qual -Wlogical-op -Wstrict-aliasing=2ve -Wno-missing-braces -Wno-missing-field-initializerstamamen makul bir başlatıcı için kullanıyorum struct whatever obj = {0};. Ayrıca -Wconversionyararlı uyarılardan daha fazla "spam"
verdiğini öğrendim

Yanıtlar:


158

Bağlam olarak, Google’da çalışan bir Clang geliştiricisiyim. Google’da, Clang’ın teşhis yöntemlerini (esas olarak) tüm C ++ geliştiricilerimize sunduk ve Clang’ın uyarılarını hata olarak da değerlendirdik. Hem bir Clang geliştiricisi hem de Clang'ın teşhis alanlarından daha büyük kullanıcılarından biri olarak, bu bayraklara ve bunların nasıl kullanılabileceğine ışık tutmaya çalışacağım. Açıkladığım her şeyin genel olarak Clang'a uygulanabilir olduğunu ve C, C ++ veya Objective-C'ye özgü olmadığını unutmayın.

TL; DR Sürümü: Lütfen geliştirdiğiniz kodlarda -Wallve -Werroren azından kullanın . Biz (derleyici geliştiricileri) buraya iyi sebeplerden dolayı uyarılar ekliyoruz: hata buluyorlar. Sizin için hata yakalayan bir uyarı bulursanız, onu da açın. -WextraBurada bir sürü iyi aday deneyin . Bunlardan biri karlı kullanmanız için çok gürültülü ise, bir hata bildiriniz . Eğer "bariz" bir hata içeren bir kod yazarsanız fakat derleyici bunun hakkında uyarmadıysa, bir hata yazınız.

Şimdi uzun versiyon için. Öncelikle uyarı bayrağı gruplamaları hakkında biraz bilgi edinin. Clang'da (ve GCC'de sınırlı bir ölçüde) bir çok "gruplandırma" uyarısı vardır. Bu tartışma ile ilgili bazıları:

  • Varsayılan olarak: Açıkça devre dışı bırakmadığınız sürece bu uyarılar her zaman açıktır.
  • -Wall: Bunlar, geliştiricilerin hem değerlerine güvenlerinin yüksek , hem de yanlış pozitif oranın düşük olduğu uyarılarıdır .
  • -Wextra: Bunlar değerli ve sağlam olduğuna inanılan uyarılardır (yani, adamcağınız bir araba değildir), ancak yanlış pozitif oranlara veya ortak felsefi itirazlara sahip olabilirler.
  • -Weverything: Bu, Clang'da her uyarıyı tam anlamıyla sağlayan deli bir grup . Bunu kodunda kullanma. Kesinlikle Clang geliştiricileri veya hangi uyarıların mevcut olduğunu araştırmak için tasarlanmıştır .

Yukarıda belirtilen uyarıların Clang'da nereye gittiğini belirleyen iki ana kriter vardır ve bunların ne anlama geldiğini netleştirelim. Birincisi , uyarının belirli bir oluşumunun potansiyel değeridir . Uyarı tetiklendiğinde ve kodla ilgili bir sorunu doğru şekilde tanımladığında , kullanıcıya (geliştirici) beklenen fayda budur .

İkinci kriter yanlış-pozitif raporlar fikridir . Bunlar, uyarının kodun üzerine ateşlendiği durumlardır, ancak belirtilen potansiyel problem aslında programın kapsamı veya başka bir kısıtlaması nedeniyle gerçekleşmez. Uyarılan kod aslında doğru davranıyor. Bunlar, özellikle uyarı bu kod paternine ateş etmek niyetinde olmadığında kötüdür. Bunun yerine, uyarının uygulanmasında orada ateşlenmesine neden olan bir eksikliktir.

Clang uyarıları için, değerin stil, tat veya kodlama kuralları açısından değil , doğruluk açısından olması gerekir . Bu {}, bir ififadenin gövdesinde kullanılmadığı zaman uyarılması gibi istenen uyarıları engellemek için mevcut uyarı kümesini sınırlar . Clang ayrıca yanlış pozitiflere karşı çok hoşgörüsüzdür . Diğer birçok derleyiciden farklı olarak, yapının tam olarak yazılması, fazladan '()', heceler ve hatta önişlemci makrolarının varlığı veya yokluğu dahil olmak üzere yanlış pozitifleri budamak için inanılmaz çeşitli bilgi kaynakları kullanacaktır!

Şimdi Clang'dan bazı gerçek dünya örnekleri uyarları alalım ve nasıl kategorize edildiklerine bakalım. İlk önce, varsayılan bir uyarı:

% nl x.cc
     1  class C { const int x; };

% clang -fsyntax-only x.cc
x.cc:1:7: warning: class 'C' does not declare any constructor to initialize its non-modifiable members
class C { const int x; };
      ^
x.cc:1:21: note: const member 'x' will never be initialized
class C { const int x; };
                    ^
1 warning generated.

İşte bu uyarıyı almak için bayrak gerekmedi. Bunun sebebi, kodun hiçbir zaman doğru olmadığı, uyarıya yüksek değer veren ve uyarı yalnızca Clang'ın bu kovaya düştüğünü ispatladığı kodun üzerine, sıfır -yanlış-pozitif bir oran vermesidir.

% nl x2.cc
     1  int f(int x_) {
     2    int x = x;
     3    return x;
     4  }

% clang -fsyntax-only -Wall x2.cc
x2.cc:2:11: warning: variable 'x' is uninitialized when used within its own initialization [-Wuninitialized]
  int x = x;
      ~   ^
1 warning generated.

Clang -Wallbu uyarının bayrağını gerektirir . Bunun nedeni, kasıtlı olarak başlatılmamış bir değer üretmek üzere uyardığımız kod desenini kullanan (iyi veya hasta için) önemsiz miktarda kodun mevcut olmasıdır . Felsefi olarak, bunun üzerinde bir nokta görmüyorum, ancak çoğu diğerleri aynı fikirde değil ve bu farklılığın gerçeği -Wallbayrak altındaki uyarıyı tetikliyor. Hala çok yüksek bir değere ve çok düşük bir yanlış-pozitif orana sahip, ancak bazı kod tabanlarında başlangıç ​​niteliğinde değil.

% nl x3.cc
     1  void g(int x);
     2  void f(int arr[], unsigned int size) {
     3    for (int i = 0; i < size; ++i)
     4      g(arr[i]);
     5  }

% clang -fsyntax-only -Wextra x3.cc
x3.cc:3:21: warning: comparison of integers of different signs: 'int' and 'unsigned int' [-Wsign-compare]
  for (int i = 0; i < size; ++i)
                  ~ ^ ~~~~
1 warning generated.

Bu uyarı -Wextrabayrak gerektirir . Bunun nedeni, karşılaştırmalardaki yanlış eşleşme işaretinin aşırı yaygın olduğu çok büyük kod tabanları olmasıdır. Bu uyarı bazı hataları bulsa da, kullanıcı yazdığında kodun bir hata olma olasılığı ortalama olarak oldukça düşüktür. Sonuç, son derece yüksek bir yanlış-pozitif orandır. Ancak, tuhaf promosyon kuralları nedeniyle bir programda bir hata olduğunda, genellikle bir böceğin işaretlerini göreceli olarak yüksek bir değere sahip olduğu zaman bu uyarıyı yapmak çok zekicedir . Sonuç olarak, Clang bunu sağlar ve bir bayrak altında gösterir.

Genellikle, uyarılar -Wextrabayrağın dışında uzun süre yaşamaz . Clang, düzenli kullanım ve test görmeyen uyarıların uygulanmaması için çok çalışıyor. Ekteki uyarılar -Weverything, genellikle aktif gelişimdeki veya aktif hata içeren uyarılardır. Ya sabitlenmiş ve uygun bayrakların altına yerleştirilecekler, ya da kaldırılmaları gerekiyor.

Şimdi bu şeylerin Clang'la nasıl çalıştığını anladığımıza göre, asıl soruya dönelim: Gelişiminiz için hangi uyarıları açmalısınız? Cevap maalesef buna bağlı. Durumunuz için hangi uyarıların en iyi şekilde çalıştığını belirlemek için aşağıdaki soruları göz önünde bulundurun.

  • Tüm kodlarınız üzerinde kontrolünüz var mı, yoksa bazıları harici mi?
  • Hedeflerin ne? Hata yakalamak veya daha iyi kod yazmak?
  • Yanlış pozitif toleransınız nedir? Uyarıları susturmak için düzenli olarak ekstra kod yazmak ister misiniz?

Öncelikle ve en önemlisi, eğer kodu kontrol etmezseniz, orada fazladan uyarı vermeyi denemeyin. Bazı kapatmak için hazır olun. Dünyada birçok kötü kod var ve hepsini düzeltemeyebilirsiniz. Sorun değil. Kod üzerinde çaba için bir yol bulmak için çalışın sen kontrol eder.

Ardından, uyarılarınızdan ne istediğinizi anlayın. Bu farklı insanlar için farklı. Clang, korkunç hatalar veya uzun zaman önceliğine sahip olduğumuz kod kalıpları üzerinde hata oranının aşırı yüksek olduğunu belirten herhangi bir seçenek olmadan uyarmaya çalışacaktır. Etkinleştirerek -Wall, Clang geliştiricilerin C ++ kodunda gözlemlediği en yaygın hataları yakalamayı hedefleyen çok daha agresif bir dizi uyarı alacaksınız. Ancak bunların her ikisinde de yanlış pozitif oran oldukça düşük kalmalıdır.

Son olarak, her dönüşde * yanlış-pozitif * s'leri susturmaya tamamen istekli iseniz , devam edin -Wextra. Çok fazla gerçek böcek yakalayan, ama aptal veya anlamsız yanlış pozitif olan uyarılar fark ederseniz, hataları dosyalayın. Biz sürekli daha böcek bulma mantığı daha getirmek içinde sunmak için yollar bulmaya çalışıyoruz -Wextraiçine -Wallbiz yanlış pozitifler önlemek nerede.

Pek çok kişi bu seçeneklerin hiçbirinin onlar için doğru olmadığını görecektir. Google’da, -Walluyarıyı ihlal eden birçok kod nedeniyle bazı uyarıları kapattık. Bazı uyarıları, henüz etkinleştirilmemiş olmalarına rağmen -Wall, bizim için özellikle yüksek bir değere sahip olduklarından açıkça açıkça belirttik . Kilometreniz değişecek, ancak muhtemelen benzer şekillerde de değişecek. Hepsi yerine birkaç önemli uyarının yapılması genellikle daha iyi olabilir -Wextra.

Herkesi-Wall eski olmayan bir kod için açmaya teşvik ediyorum . Yeni kod için, buradaki uyarılar neredeyse her zaman değerlidir ve gerçekten kod geliştirme deneyimini daha iyi hale getirir. Tersine, ben herkese tavsiye ederim değil ötesinde bayrakları etkinleştirmek -Wextra. Eğer bir Clang uyarısı bulursanız -Wextra içermez ancak kanıtlıyor ki hiç değerli senin için, basitçe bir hata dosyası ve biz muhtemelen altına koymak -Wextra. Uyarıların bazı alt kümelerini açıkça etkinleştirip etkinleştirmemeniz, -Wextrabüyük ölçüde kodunuza, kodlama stilinize ve bu listeyi korumanın her şeyi çözmekten daha kolay olup olmayacağına bağlıdır -Wextra.

(Her ikisi de dahil uyarıların OP'ın listesinin -Wallve -Wextrayalnızca aşağıdaki uyarılar vardır) değil , bu iki grup kapsamındaki (veya varsayılan olarak açıktır). İlk grup, açık uyarı bayraklarına aşırı güvenmenin neden kötü olabileceğini vurgulamaktadır: Bunlardan hiçbiri Clang'da bile uygulanmamaktadır ! Yalnızca GCC uyumluluğu için komut satırında kabul edilirler.

  • -Wbad-function-cast
  • -Wdeclaration-after-statement
  • -Wmissing-format-attribute
  • -Wmissing-noreturn
  • -Wnested-externs
  • -Wnewline-eof
  • -Wold-style-definition
  • -Wredundant-decls
  • -Wsequence-point
  • -Wstrict-prototypes
  • -Wswitch-default

Orijinal listedeki gereksiz uyarıların bir sonraki kovası, bu listedeki diğerleriyle gereksiz olanlardır:

  • -Wformat-nonliteral -- Alt kümesi -Wformat=2
  • -Wshorten-64-to-32 -- Alt kümesi -Wconversion
  • -Wsign-conversion -- Alt kümesi -Wconversion

Daha kategorik olarak farklı olan bir dizi uyarı da mevcut. Bunlar, buggy ya da buggy olmayan kodlardan ziyade dil lehçesi değişkenleriyle ilgilidir. Bunun haricinde -Wwrite-strings, bunlar Clang tarafından sağlanan dil eklentileri için uyarılardır. Clang'ın kullanımı hakkında uyarılıp uyarılmadığı, uzantının yaygınlığına bağlıdır. Clang, GCC uyumluluğunu hedeflemektedir ve bu nedenle çoğu durumda, kullanımda olan örtük dil uzantılarıyla bunu kolaylaştırmaktadır. -Wwrite-stringsOP'de yorumlandığı gibi, GCC'den program anlamını değiştiren bir uyumluluk bayrağıdır. Bu bayrağa çok pişmanım ama şu an sahip olduğu miras nedeniyle onu desteklemek zorundayız.

  • -Wfour-char-constants
  • -Wpointer-arith
  • -Wwrite-strings

Aslında potansiyel olarak ilginç uyarıları mümkün kılan diğer seçenekler şunlardır:

  • -Wcast-align
  • -Wconversion
  • -Wfloat-equal
  • -Wformat=2
  • -Wimplicit-atomic-properties
  • -Wmissing-declarations
  • -Wmissing-prototypes
  • -Woverlength-strings
  • -Wshadow
  • -Wstrict-selector-match
  • -Wundeclared-selector
  • -Wunreachable-code

Bunların olmama nedeni -Wallya -Wextrada her zaman net değil. Bunların pek çoğu için, aslında GCC uyarıları (dayalıdır -Wconversion, -Wshadowvs.) ve bu tür Clang GCC davranışını taklit etmeye çalışır olarak. Bunlardan bazılarını yavaş yavaş daha ince taneli ve kullanışlı uyarılara bölüyoruz. Bunlar daha sonra, üst düzey uyarı gruplarından birine girme olasılıkları daha yüksektir. Bu bir uyarı üzerine, almaya, söz konusu -Wconversionolan bu yüzden büyük olasılıkla yakın gelecekte kendi "üst düzey" kategorisi kalacağını geniş. GCC'nin sahip olduğu ancak değeri düşük ve değeri yüksek yanlış pozitif oranlara sahip diğer bazı uyarılar da benzer bir kimseye ait olmayan topraklara devredilebilir.

Bunların daha büyük kovalardan birinde bulunmamasının diğer nedenleri arasında basit hatalar, çok önemli yanlış pozitif sorunlar ve geliştirme uyarıları yer alıyor. Tanımlayabildiğimler için dosyalama hataları arayacağım. Sonunda hepsi uygun bir büyük kova işaretine geçmeli veya Clang'dan çıkarılmalıdır.

Umarım bu, Clang ile uyarı durumunu netleştirir ve kullanımı veya şirketlerinin kullanımı için bir dizi uyarı almaya çalışanlar için bazı bilgiler sunar.


8
Üstün cevap! Çok teşekkürler. Birkaç kez tekrar okumam gerekecek, ancak bazı yorumlarla yakında geri döneceğim. Tekrar teşekkürler!
Mac:

1
@Candler Carruth: Harika cevap! Bir şey değişmişse, belki güncelleyebilir misiniz? Uyarılarınızı son listenizde kullanıyorum, ancak bazıları zaten Wextra'ya taşındı?
gartenriese

Bu mükemmel bir yazı. Ancak yeni uyarılar bulmak, bir bayrak için son derece iyi bir kullanım buldum, bu nedenle, bu tür bir keşif için faydalı olduğunu kabul etmeme rağmen, "her şey" grubuna bu kadar olumsuz yerleştirilmiş göründüğünüz için hayal kırıklığına uğradım.
Kyle Strand

@Candler Carruth: "Asla doğru dürüst" koduyla ilgili uyarının arkasındaki mantığa katılıyorum. Sadece -Wnokapatmaya gerek warn_no_constructor_for_refconst kalmaması PITA'nın Boost.ConceptCheck ve benzerini kullanmasını sağlar: github.com/boostorg/concept_check/blob/…
mloskot

2

Clang kullanmıyorum, ama umarım benim de fikrimi aldırmazsın. Ayrıca maksimum uyarı seviyesiyle (duvarın ne anlama geldiğini sanıyorum) ve uyarıları hata olarak kabul ediyorum (bunun ne anlama geldiğini sanıyorum) ve sadece çok anlamlı olmayan birkaç uyarıyı devre dışı bırakıyorum. Aslında, çok yararlı bazı uyarıların C # derleyicisi tarafından yayınlanmadığı ve bunlardan birinin görebilmesi için özel kod analiz araçları kullanması gerektiğinden dolayı oldukça kızgınım. Uyarıları severim, çünkü kodumdaki küçük hataları ve hataları yakalamama yardımcı oluyorlar. Onları o kadar seviyorum ki, doğru olduğunu bildiğim bir kod parçası için bir uyarı verildiğinde, bu kodu yine de yeniden değerlendiriyorum, böylece uyarıyı devre dışı bırakmak yerine uyarı verilmeyecek veya - daha da kötüsü - görünmesini ve görmezden gelmesini sağla. Uyarıların harika olduğunu düşünüyorum.


1
Cevap için teşekkürler. Ne yazık ki, -Wallyalnızca temel uyarılar sağlar. Birçok mevcut uyarı bayrağı bu kapsamda değil -Wall, bu yüzden sorumu listele.
-Macmade

0

Genellikle yeni bir proje için Xcode'un varsayılan ayarlarına giderim; yararlı ve sinir bozucu iyi bir denge sağlar. Herhangi bir özel uyarı listesi ve diğer derleyici seçenekleri, büyük ölçüde kişisel tercihlere veya proje gereksinimlerine dayanacaktır, bu nedenle listenizde ilerlemeye ve belirli uyarılara karşı ya da bunlara karşı çıkmaya çalışmanın çok fazla değeri olduğunu düşünmüyorum. İşe yararsa, harika. Derleyicinin tespit etmesi gereken bazı hatalar yaptığını tespit ederseniz ve gelecekte bununla ilgili yardım almak isterseniz, bu konuda uyarmak ve açmak için bir derleyici seçeneği arayın.

Birçok programcının savunuculuğunu yaptığı bir şey, herhangi bir uyarı varsa, yapıların başarı ile tamamlanmasını önlemek için "Uyarıları Hata Olarak Uygula" (-Werror) seçeneğini açmaktır.


Cevap için teşekkürler! Katılıyorum -Werror. Aslında, Clang kullandığım için, tüm bu uyarıları pragma (#pragma clang diagnostik) kullanarak ayarlıyorum ve ölümcül hatalara ayarlandılar, bu yüzden aynı -Werror
:)

0

İnsanların uyarıları önemsemediğine dair en iyi kanıtın, onların var olmaları ve yaygın olarak kullanılmaları olduğunu düşünüyorum. Derleme süresi boyunca ne kadar fazla hata yakalanırsa o kadar iyi olduğu kanısındayım. Bu geniş çapta tutulan bir inanç olmasaydı, herkes dinamik olarak zayıf yazılmış diller kullanırdı, çünkü onların derleyicileri ya da tercümanları size çok daha fazla yer bırakıyordu. Aksine, yazı dillerinde bile strictbayrakların kullanımı popülerdir. Statik olarak yazılan dillerde insanlar yalnızca -Wall -Werrorsık kullanmazlar , aynı zamanda daha çok istedikleri kadar uyarılar da bulurlar , bu nedenle tek amacı uyarıları olan Coverity gibi statik analiz araçları için ödeme yaparlar .

Bu, detektör olmadığı anlamına gelmez. Birçok geliştirici, uyarıları uzun vadede çalışmak yerine kısa vadede kendilerine karşı çalışmak olarak görmekte ve altta yatan sorunu gidermeye çalışmamaktadır. Bu nedenle, dün karşılaştığım bu snippet gibi güzel bir kod görüyorsunuz:

node = node; // Shut up compiler warning

Cevabınız için teşekkürler. Sorun şu ki, insanları çalışmayan insanlar görüyorum -Werrorve derleyici tarafından verilen uyarıları görmezden geliyorum . Ya da yaparlarsa, genellikle yapışırlar -Wall. Soruma verdiğim bayrakların çoğu bu kapsama dahil değil -Wallve şahsen onların da gerekli olduğunu düşünüyorum. Yani ben sadece paranoyak mıyım? ; )
Mac’te

0

Genel olarak -Wall'a daha fazla yaslanıyorum ve kesinlikle -Werror'u da içerdiğine inanıyorum. Bir modül asla beklenmeyen uyarılar olmamalıdır . Sonunda başka bir uyarı alacak ve onu özleyeceksin. Ve bu aslında bir problem olacak.

Aynı zamanda yeni veya eski bir projeye "-Wall -Werror" ekleyip eklemeyeceğinize bağlıdır. Eğer yeniyse, öyleyse devam et ve mükemmelliği talep et, aksi halde muhtemelen günler veya haftalarca düzenleme ve test yapmaktasın. Bunu biraz daha eski bir projede yaptım ve iki veya üç günümü uyarıları kaldırarak geçirdim. Sanırım kod şimdi daha temiz.

Başka bir deyişle, deneyin ve görün.

azgın


1
Eğer sadece endişeliyseniz -Wallve -Werrorsanırım soruyu tekrar okumalısınız. Birçok uyarı bayrağı kapsanmamaktadır -Wall. Yine de cevap için teşekkürler.
Macmade
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.