-o cambia il nome del file di output (l'ho scoperto usando --help)
Ma non riesco a scoprire cosa -Wallfa?
-o cambia il nome del file di output (l'ho scoperto usando --help)
Ma non riesco a scoprire cosa -Wallfa?
manvoci per i programmi se vuoi sapere cosa fa un interruttore o quali interruttori sono disponibili. La manpagina di gccpuò essere letta su linux.die.net/man/1/gcc - puoi fare una rapida ricerca lì per il testo "-Wall"
Risposte:
È l'abbreviazione di "warn all" - attiva (quasi) tutti gli avvisi di cui g ++ può dirti. In genere una buona idea, soprattutto se sei un principiante, perché comprendere e correggere questi avvisi può aiutarti a risolvere molti tipi diversi di problemi nel tuo codice.
-Wextrae -pedantic.
-Wall -Wextra, e poi esplorare il manuale per trovare il maggior numero di altri avvertimenti si potrebbe attivare il più possibile, perché anche -Wextraè solo un piccolo sottoinsieme ...
-Wunreachable-codequalche tempo fa, Apple sarebbe molto più felice in questi giorni. ;-)
Vedi man gcc.
-Wall attiva questi avvisi:
-Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts
-Wenum-compare (in C/Objc; this is on by default in C++) -Wimplicit-int (C and
Objective-C only) -Wimplicit-function-declaration (C and Objective-C only)
-Wcomment -Wformat -Wmain (only for C/ObjC and unless -ffreestanding)
-Wmissing-braces -Wnonnull -Wparentheses -Wpointer-sign -Wreorder -Wreturn-type
-Wsequence-point -Wsign-compare (only in C++) -Wstrict-aliasing
-Wstrict-overflow=1 -Wswitch -Wtrigraphs -Wuninitialized -Wunknown-pragmas
-Wunused-function -Wunused-label -Wunused-value -Wunused-variable
-Wvolatile-register-var
-Wextra contiene:
-Wclobbered -Wempty-body -Wignored-qualifiers -Wmissing-field-initializers
-Wmissing-parameter-type (C only) -Wold-style-declaration (C only) -Woverride-init
-Wsign-compare -Wtype-limits -Wuninitialized -Wunused-parameter (only with -Wunused
or -Wall) -Wunused-but-set-parameter (only with -Wunused or -Wall)
Ci sono molti altri avvisi che devi attivare esplicitamente.
Ad esempio per il nostro codice C usiamo:
-Wall -Wextra -Waggregate-return -Wcast-align -Wcast-qual -Wdisabled-optimization -Wdiv-by-zero -Wendif-labels -Wformat-extra-args -Wformat-nonliteral -Wformat-security -Wformat-y2k -Wimplicit -Wimport -Winit-self -Winline -Winvalid-pch -Wjump-misses-init -Wlogical-op -Werror = missing-braces -Wmissing-dichiarations -Wno-missing-format-attribute -Wmissing-include-dirs -Wmultichar -Wpacked -Wpointer-arith -Wreturn-type -Wsequence-point -Wsign-compare -Wstrict-aliasing -Wstrict-aliasing = 2 -Wswitch -Wswitch-default -Werror = undef -Wno-unused -Wvariadic-macro -Wwrite-strings -Wc ++ -compat -Werror = dichiarazione-dopo-istruzione -Werror = dichiarazione-funzione-implicita -Wmissing-prototypes -Werror = nested-externs -Werror = definizione vecchio stile -Werror = strict-prototypes
o solo il set di avvisi con https://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html
Purtroppo, nessuna delle risposte sta citando la parte effettivamente rilevante del manuale, il che lo porta davvero a un punto:
Ciò abilita tutti gli avvisi sulle costruzioni che alcuni utenti considerano discutibili e che sono facili da evitare (o modificare per impedire l'avviso), anche in combinazione con le macro.
[...]
Notare che alcuni flag di avviso non sono impliciti da
-Wall. Alcuni di loro mettono in guardia contro costruzioni che gli utenti generalmente non considerano discutibili, ma che occasionalmente potresti voler verificare; altri segnalano costruzioni che in alcuni casi sono necessarie o difficili da evitare e non esiste un modo semplice per modificare il codice per sopprimere l'avviso. Alcuni di essi sono abilitati da,-Wextrama molti di essi devono essere abilitati individualmente.
Quindi:
-Wallnon non significa "tutte le avvertenze".In conclusione, si tratta del minimo assoluto di avvisi da impostare. Anche se -Wall -Wextraè meglio, non sta ancora facendo uso di tutti gli errori che il tuo compilatore può fare per te.
Personalmente non andrei per meno di -Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual. Tutti i miei progetti attuali utilizzano effettivamente un elenco di avvisi più lungo di quello (senza attivarne nessuno). E controllo il manuale su ogni versione principale per nuove opzioni. Il compilatore è tuo amico. Usa qualsiasi diagnostica che può offrirti.
-Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtualmentre compilo g++ -std=c++11mentre imparo il c ++ e la programmazione? O dovrei saltare questa parte e iniziare a utilizzare i flag dei messaggi di errore in seguito? In tal caso, quando devo iniziare con i messaggi di errore?
Abilita gli avvisi che sono ritenuti utili e facili da evitare alla fonte dagli autori di gcc. C'è anche -W (-Wextra nelle versioni più recenti) che sono ritenute utili ma per le quali aggirare i falsi positivi può essere difficile o risultare in codice goffo.
gcc ha anche un sacco di altri avvertimenti, generalmente meno utili. Vedi http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Warning-Options.html#Warning-Options
Mostra tutti gli avvisi. Consiglierei anche di usarlo -pedanticper mettere in guardia su alcune parti di codice non conformi.