G ++ 'da -pedantic flag kullanıp kullanmamak?


16

C ++ öğreniyorum ve pratik için Linux üzerinde g ++ kullanıyorum.

  1. Programcı olarak çalışan insanların g ++ -pedantic flag kullanıp kullanmadığını ve gerçek dünyada önemini bilmek istiyorum.

  2. Peki ya diğer derleyiciler, buna da izin veriyorlar mı? Bu fiili bir standart haline geldi mi?

Çünkü yazar nerede const olmayan ifade dizi tanımı ve boyut olarak varsayılan olarak g ++ kullanmak için yasadışı işaret C ++ Primer okuyorum. Ve farkında olmadığım başka şeyler de olabilir.



Yanıtlar:


21

Evet, kesinlikle yap. Aslında, manuel sayfayı incelemeniz -pedanticve -Wallyapacağınızdan daha fazla uyarıyı açmanız gerekir .

Hayır, standart yok. MSVC /W4örneğin kullanır .


7
+1, genellikle yaparım -Wall -Wextra -Werror -pedantic -std=c++0x:)
greyfade

4
@JaredBurrows: Aslında -pedanticC ++ ile kullanmayı bıraktım çünkü GCC'nin kılavuzu sadece C içindir ve -std=c++14yeni projelerde kullanmaya başladım .
greyfade

1
@greyfade Ah, söylemeliydim ki, -Wall -Wextra -Werror -std=c++14:)
Jared Burrows

1
Ben sadece uyarıları değil hataları verir -pedantic-hataları keşfetti.
Galik

6
@VillasV Eh -Werror, tüm uyarıları hatalara dönüştürür. Ancak -pedantic-errorssadece Standard ICO C++ihlallerde hata yapar .
Galik

10

C ++ 'ı bir süredir programlamamış olsam da, bu bayrağı kullanmanızı tavsiye ederim. Standartlara uygun kod oluşturmanıza yardımcı olur ve herkesin hayatını kolaylaştıracaktır. AFAIK, diğer derleyicilerin çoğu gcc / g ++ uzantılarını desteklemez.

Örneğin, orijinal geliştirici standart olmayan derleyici uzantılarına karşı kodlamaya karar verdiğinden, kod derleyemediğimde bundan nefret ediyorum.

Bahse girerim C / C ++ ile yazılmış çok büyük miktarda (% 20 diyelim) linux programlarının gcc / g ++ 'dan başka bir şeyle derlemeyeceğine inanıyorum ki bu beni biraz üzüyor. Daima standartlara uyun.


2
Diğer derleyiciler kullanarak çalıştı son kez, bunu en fazla% 20 gibi olduğunu söyleyebilirim ediyorum diğer derleyiciler ile çalışmak ve gcc uzantıları bağlıydı% 80.
Jerry Coffin

6

Şahsen ben kullanıyorum:

-Duvar -Wextra -Whadow -Weffc ++ -Wstrict-aliasing -ansi -pedantic -Werror

Bu nedenle bir dizi uyarıyı açar, ancak daha da önemlisi tüm uyarıları hata olarak kabul eder (çoğu uyarı düşünmenizdeki mantıksal hatalardır).


2019 yılında bu listeye bir şey ekler misiniz?
Ayxan

1
@Ayxan Herkesin kullanmasını tavsiye ettiğim minimum set budur. Ama yararlı olan bir sürü daha var. Ancak belgeleri yeniden yazmanız ve sizin için yararlı olup olmadığını görmeniz gerekir. Bir bak-Wunreachable-code -Wno-long-long
Martin York

1
@Ayxan Profil kodu oluştururken:-g -pg -fprofile-arcs -ftest-coverage
Martin York

1
@Ayxan Hata ayıklama yaparken-g -O0
Martin York

1
@Ayxan Üretim kodu oluştururken-O3
Martin York

1

-pedanticBayrağı kullanmak oldukça önemlidir .

Ben sadece, mevcut standart ile benzer bir şey kullanmanız tavsiye edilir eklemek istiyorum:

-std=c++17 -Wall -Wextra -Werror -Wpedantic -pedantic-errors

Nerede:

  • -std=c++172017'de yayınlanan C ++ standardının revizyonuna uymasını söyler, burada daha fazla bilgi edinebilirsiniz .

  • -Wall söyler:

    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), diğer bir deyişle bazı uyarı kümeleriyle ilgili tüm uyarıları etkinleştirin.

  • -Wextra yine de hepsini değil, bazı uyarıları etkinleştirmesini söyler.

  • -Werror hatalara karşı tüm uyarıları yapmasını söyler.

  • -Wpedanticya da sadece şunu -pedanticsöyler:

    Sıkı ISO C ve ISO C ++ tarafından talep edilen tüm uyarıları verin; yasak uzantıları kullanan tüm programları ve ISO C ve ISO C ++ takip etmeyen diğer programları reddedin.

  • -pedantic-errors temel standart (bkz. -Wpedantic) bir tanılama gerektirdiğinde hata vermesini söyler.


Bu set genellikle yeni başlayanlar için yararlı değildir, çünkü her bir uyarının kademeli olarak hataya neden olma potansiyeline sahip olduğunu öğrenecek, aynı zamanda normal kullanım için de yararlı olacaktır.

Tüm uyarı seçenekleri burada GNU / GCC sayfasında ayrıntılı olarak açıklanmaktadır .

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.