Uczę się C ++ i używam g ++ na Linuksie do ćwiczeń.
Chcę wiedzieć, czy ludzie pracujący jako programiści używają flagę g ++ -antic, a także jej znaczenie w świecie rzeczywistym.
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.
Odpowiedzi:
Tak, absolutnie zrób to. W rzeczywistości musisz przestudiować stronę podręcznika i włączyć więcej ostrzeżeń niż
-pedantic
i-Wall
zrobi.Nie, nie ma standardu. MSVC używa
/W4
na przykład.źródło
-Wall -Wextra -Werror -pedantic -std=c++0x
:)-pedantic
C ++, ponieważ podręcznik GCC sugeruje, że jest on przeznaczony tylko dla C, i zacząłem używać go-std=c++14
w nowych projektach.-Wall -Wextra -Werror -std=c++14
:)-Werror
zamienia wszystkie ostrzeżenia w błędy. Ale-pedantic-errors
popełnia błędy tylko zStandard ICO C++
powodu naruszeń.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.
źródło
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).
źródło
-Wunreachable-code -Wno-long-long
-g -pg -fprofile-arcs -ftest-coverage
-g -O0
-O3
Korzystanie z
-pedantic
flagi jest bardzo istotne .Dodam tylko, że przy obecnym standardzie wskazane jest użycie czegoś podobnego do:
Gdzie:
-std=c++17
nakazuje mu przestrzegać wersji standardu C ++ opublikowanej w 2017 r. Więcej informacji na ten temat można znaleźć tutaj .-Wall
mówi to:-Wextra
nakazuje włączyć więcej ostrzeżeń, wciąż nie wszystkie.-Werror
nakazuje przekształcenie wszystkich ostrzeżeń w błędy.-Wpedantic
lub po prostu-pedantic
mówi:-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 .
źródło