Czy używać flagi -edantic w g ++ czy nie?

16

Uczę się C ++ i używam g ++ na Linuksie do ćwiczeń.

  1. Chcę wiedzieć, czy ludzie pracujący jako programiści używają flagę g ++ -antic, a także jej znaczenie w świecie rzeczywistym.

  2. Co z innymi kompilatorami, czy one również na to pozwalają? Czy stało się to de facto standardem?

Interesuje mnie to, ponieważ czytam elementarz C ++ Primer, w którym autor wskazuje, że nielegalne jest używanie wyrażenia non-const jako wymiaru w definicji tablicy, a g ++ domyślnie na to pozwala. I mogą być inne rzeczy, których nie jestem świadomy.

użytkownik803563
źródło

Odpowiedzi:

21

Tak, absolutnie zrób to. W rzeczywistości musisz przestudiować stronę podręcznika i włączyć więcej ostrzeżeń niż -pedantici -Wallzrobi.

Nie, nie ma standardu. MSVC używa /W4na przykład.

Edward Strange
źródło
7
+1, zwykle tak robię -Wall -Wextra -Werror -pedantic -std=c++0x:)
greyfade
4
@JaredBurrows: Właściwie przestałem używać -pedanticC ++, ponieważ podręcznik GCC sugeruje, że jest on przeznaczony tylko dla C, i zacząłem używać go -std=c++14w nowych projektach.
greyfade
1
@greyfade Ach, powinienem powiedzieć: -Wall -Wextra -Werror -std=c++14:)
Jared Burrows
1
Właśnie odkryłem -antyczne błędy, które dają błędy, a nie ostrzeżenia.
Galik
6
@VillasV Dobrze -Werrorzamienia wszystkie ostrzeżenia w błędy. Ale -pedantic-errorspopełnia błędy tylko z Standard ICO C++powodu naruszeń.
Galik
10

Chociaż od dłuższego czasu nie programowałem C ++, radzę użyć tej flagi. Pomaga w tworzeniu kodu zgodnego ze standardami i ułatwia życie wszystkim. AFAIK, większość innych kompilatorów nie obsługuje rozszerzeń gcc / g ++.

Nienawidzę go na przykład, gdy nie mogę skompilować kodu tylko dlatego, że pierwotny programista zdecydował się na kodowanie niestandardowych rozszerzeń kompilatora.

Założę się, że ogromna ilość (powiedzmy 20%) programów linuksowych napisanych w C / C ++ nie skompiluje się z niczym innym jak gcc / g ++, co mnie trochę zasmuca. Zawsze przestrzegaj standardów.

Sokół
źródło
2
Ostatnim razem, gdy próbowałem użyć innych kompilatorów, powiedziałbym, że było to około 20%, które działałoby z innymi kompilatorami, a 80% zależało od rozszerzeń gcc.
Jerry Coffin
6

Osobiście używam:

-Wall -Wextra -Wshadow -Weffc ++ -Wstrict-aliasing -ansi -pedantic -Werror

W ten sposób włącza się wiele ostrzeżeń, ale co ważniejsze traktuje wszystkie ostrzeżenia jako błędy (ponieważ większość ostrzeżeń to błędy logiczne w twoim myśleniu).

Martin York
źródło
Czy dodałbyś coś do tej listy w 2019 roku?
Ayxan
1
@Ayxan To minimalny zestaw, który polecam każdemu. Ale jest jeszcze wiele przydatnych. Ale musisz przejrzeć dokumentację i sprawdzić, czy są one dla Ciebie przydatne. Spójrz na-Wunreachable-code -Wno-long-long
Martin York
1
@Ayxan Podczas budowania kodu profilowania:-g -pg -fprofile-arcs -ftest-coverage
Martin York
1
@Ayxan Podczas budowania debugowania-g -O0
Martin York
1
@Ayxan Podczas budowania kodu produkcyjnego-O3
Martin York
1

Korzystanie z -pedanticflagi jest bardzo istotne .

Dodam tylko, że przy obecnym standardzie wskazane jest użycie czegoś podobnego do:

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

Gdzie:

  • -std=c++17nakazuje mu przestrzegać wersji standardu C ++ opublikowanej w 2017 r. Więcej informacji na ten temat można znaleźć tutaj .

  • -Wall mówi to:

    Włącz wszystkie ostrzeżenia o konstrukcjach, które niektórzy użytkownicy uważają za wątpliwe i których można łatwo uniknąć (lub zmodyfikować, aby zapobiec ostrzeżeniu), nawet w połączeniu z makrami, innymi słowy, niektóre ostrzeżenia.

  • -Wextra nakazuje włączyć więcej ostrzeżeń, wciąż nie wszystkie.

  • -Werror nakazuje przekształcenie wszystkich ostrzeżeń w błędy.

  • -Wpedanticlub po prostu -pedanticmówi:

    Wydawaj wszystkie ostrzeżenia wymagane przez ścisłe ISO C i ISO C ++; odrzuć wszystkie programy korzystające z zabronionych rozszerzeń oraz niektóre inne programy, które nie są zgodne z ISO C i ISO C ++.

  • -pedantic-errors każe mu podawać błąd, ilekroć podstawowy standard (patrz -Wedantic) wymaga diagnostyki.


Ten zestaw jest zwykle przydatny nie tylko dla początkujących, ponieważ stopniowo uczą się, że każde ostrzeżenie może powodować błędy, ale także do normalnego użytkowania.

Wszystkie opcje ostrzeżeń są szczegółowo opisane tutaj na stronie GNU / GCC .

LinuxSecurityFreak
źródło