Se usare o -anticantic flag in g ++ o no?


16

Sto imparando il C ++ e sto usando g ++ su Linux per esercitarmi.

  1. Voglio sapere se le persone che lavorano come programmatori usano la bandiera a forma di g ++ e anche la sua importanza nel mondo reale.

  2. Che dire degli altri compilatori, lo consentono anche? Questo è diventato uno standard di fatto?

Sono interessato perché sto leggendo C ++ Primer in cui l'autore indica che è illegale utilizzare l'espressione non const come dimensione nella definizione dell'array e g ++ per impostazione predefinita lo consente. E potrebbero esserci altre cose di cui non sono a conoscenza.



Risposte:


21

Sì, assolutamente farlo. In realtà, è necessario studiare la pagina di manuale e attivare più avvisi di -pedantice -Wallfarà.

No, non esiste uno standard. MSVC utilizza /W4ad esempio.


7
+1, di solito lo faccio -Wall -Wextra -Werror -pedantic -std=c++0x:)
greyfade il

4
@JaredBurrows: In realtà ho smesso di usare -pedanticcon C ++ poiché il manuale di GCC implica che è destinato solo a C, e sono passato all'utilizzo -std=c++14in nuovi progetti.
Greyfade,

1
@greyfade Ah, avrei dovuto dirlo -Wall -Wextra -Werror -std=c++14:)
Jared Burrows,

1
Ho appena scoperto -pedantic-errori che danno errori e non avvisi.
Galik,

6
@VillasV Bene -Werrortrasforma tutti gli avvisi in errori. Ma -pedantic-errorscommette errori solo dalle Standard ICO C++violazioni.
Galik,

10

Anche se non ho programmato C ++ per un po 'di tempo, ti consiglio di usare questo flag. Ti aiuta a creare codice conforme agli standard e renderà la vita di tutti più semplice. AFAIK, la maggior parte degli altri compilatori non supporta le estensioni gcc / g ++.

Lo odio per esempio, quando non riesco a compilare il codice solo perché lo sviluppatore originale ha deciso di codificare contro estensioni del compilatore non standard.

Scommetto che un'enorme quantità (diciamo il 20%) di programmi linux che sono stati scritti in C / C ++ non si compila con nient'altro che gcc / g ++, il che mi rende piuttosto triste. Rispettare sempre gli standard.


2
L'ultima volta che ho provato ad usare altri compilatori, direi che era più simile al 20% che avrebbe funzionato con altri compilatori e l'80% dipendeva dalle estensioni di gcc.
Jerry Coffin,

6

Personalmente utilizzo:

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

Pertanto attiva una serie di avvisi, ma soprattutto considera tutti gli avvisi come errori (poiché la maggior parte degli avvisi sono errori logici nel tuo modo di pensare).


Aggiungeresti qualcosa a questo elenco nel 2019?
Ayxan,

1
@Ayxan Questo è il set minimo che consiglio a tutti. Ma ce ne sono molti altri che sono utili. Ma devi rileggere la documentazione e vedere se sono utili per te. Dai un'occhiata a-Wunreachable-code -Wno-long-long
Martin York,

1
@Ayxan Quando si costruisce il codice di profilo:-g -pg -fprofile-arcs -ftest-coverage
Martin York,

1
@Ayxan Quando si costruisce il debug-g -O0
Martin York,

1
@Ayxan Quando si costruisce il codice di produzione-O3
Martin York,

1

È abbastanza essenziale usare la -pedanticbandiera.

Vorrei solo aggiungere che con l'attuale standard è consigliabile utilizzare qualcosa di simile a:

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

Dove:

  • -std=c++17gli dice di aderire alla revisione dello standard C ++, pubblicato nel 2017, puoi leggere di più qui .

  • -Wall lo dice a:

    Abilita tutti gli avvisi sulle costruzioni che alcuni utenti considerano discutibili e che sono facili da evitare (o modificali per prevenire l'avviso), anche in combinazione con le macro, in altre parole un insieme di avvisi.

  • -Wextra gli dice di abilitare altri avvertimenti, ma non tutti.

  • -Werror gli dice di trasformare tutti gli avvisi in errori.

  • -Wpedantico semplicemente lo -pedanticdice a:

    Emettere tutti gli avvisi richiesti dalle rigorose ISO C e ISO C ++; rifiutare tutti i programmi che utilizzano estensioni vietate e alcuni altri programmi che non seguono ISO C e ISO C ++.

  • -pedantic-errors gli dice di dare un errore ogni volta che lo standard di base (vedi -Wpedantic) richiede una diagnostica.


Questo set di solito è utile non solo per i principianti, poiché impareranno gradualmente che ogni avviso ha il potenziale per provocare errori, ma anche per un uso normale.

Tutte le opzioni di avviso sono descritte in dettaglio qui nella pagina GNU / GCC .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.