Se deve usar -pedantic flag em g ++ ou não?


16

Estou aprendendo C ++ e estou usando o g ++ no Linux para praticar.

  1. Quero saber se as pessoas que trabalham como programadores usam a bandeira do g ++ e também sua importância no mundo real.

  2. E os outros compiladores, eles também permitem isso? Isso se tornou um padrão de fato?

Estou interessado porque estou lendo o C ++ Primer, onde o autor aponta que é ilegal usar expressão não-const como dimensão na definição de matriz e o g ++ por padrão permite. E pode haver outras coisas que eu desconheço.



Respostas:


21

Sim, absolutamente faça isso. De fato, você precisa estudar a página de manual e ativar mais avisos do que -pedantice -Wallfará.

Não, não há padrão. MSVC usa /W4por exemplo.


7
+1, normalmente faço -Wall -Wextra -Werror -pedantic -std=c++0x:) #
greyfade 30/06

4
@JaredBurrows: Na verdade, parei de usar o -pedanticC ++, pois o manual do GCC implica que ele é destinado apenas ao C e passei a usar -std=c++14em novos projetos.
Greyfade 10/05

1
@greyfade Ah, eu deveria ter dito, -Wall -Wextra -Werror -std=c++14:)
Jared Burrows

1
Acabei de descobrir -pedantic-errors, que fornece erros, não avisos.
Galik

6
@VillasV Well -Werrortransforma todos os avisos em erros. Mas -pedantic-errorsapenas comete erros de Standard ICO C++violações.
Galik

10

Embora eu não tenha programado C ++ há algum tempo, aconselho você a usar esse sinalizador. Ajuda a criar código compatível com os padrões e facilita a vida de todos. AFAIK, a maioria dos outros compiladores não suporta as extensões gcc / g ++.

Eu odeio isso, por exemplo, quando não consigo compilar código apenas porque o desenvolvedor original decidiu codificar contra extensões de compilador não padrão.

Aposto que uma grande quantidade (digamos 20%) de programas Linux que foram escritos em C / C ++ não compilará com nada além de gcc / g ++, o que me deixa meio triste. Sempre siga os padrões.


2
A última vez que eu tentei usar outros compiladores, eu diria que foi mais como 20% que iria trabalhar com outros compiladores, e 80% dependia extensões gcc.
Jerry Coffin

6

Pessoalmente eu uso:

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

Assim, ativa uma série de avisos, mas o mais importante trata todos os avisos como erros (como a maioria dos avisos são erros lógicos em seu pensamento).


Você adicionaria algo a esta lista em 2019?
Ayxan 26/03/19

1
@ Ayxan Esse é o conjunto mínimo que eu recomendo que todos usem. Mas há muitos outros que são úteis. Mas você precisa revisar a documentação e ver se eles são úteis para você. Dê uma olhada-Wunreachable-code -Wno-long-long
Martin York

1
@Ayxan Ao criar código de perfil:-g -pg -fprofile-arcs -ftest-coverage
Martin York

1
@Ayxan Ao criar depuração-g -O0
Martin York

1
@Ayxan Ao criar código de produção-O3
Martin York

1

É bastante essencial usar a -pedanticbandeira.

Gostaria apenas de acrescentar que, com o padrão atual, é aconselhável usar algo semelhante a:

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

Onde:

  • -std=c++17diz para aderir à revisão do padrão C ++, publicada em 2017, você pode ler mais sobre isso aqui .

  • -Wall diz para:

    Habilite todos os avisos sobre construções que alguns usuários consideram questionáveis ​​e fáceis de evitar (ou modificar para impedir o aviso), mesmo em conjunto com macros, ou seja, algum conjunto de avisos.

  • -Wextra diz para habilitar mais alguns avisos, ainda não todos.

  • -Werror diz para fazer todos os avisos em erros.

  • -Wpedanticou apenas -pedanticdiz para:

    Emita todos os avisos exigidos pelo rigoroso ISO C e ISO C ++; rejeite todos os programas que usam extensões proibidas e alguns outros programas que não seguem o ISO C e ISO C ++.

  • -pedantic-errors diz para cometer um erro sempre que o padrão básico (consulte -Wpedantic) exigir um diagnóstico.


Esse conjunto geralmente é útil não apenas para iniciantes, pois eles aprendem gradualmente que cada aviso tem potencial para resultar em erro, mas também para uso normal.

Todas as opções de aviso são descritas em detalhes aqui na página GNU / GCC .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.