Mi chiedo perché gcc (4.6.3) mi dà nessun avvertimento per il codice irraggiungibile in questo esempio:gcc non avvisa il codice irraggiungibile
#include <stdio.h>
int status(void)
{
static int first_time = 1;
if (first_time) {
return 1;
first_time = 0; /* never reached */
} else {
return 0;
}
}
int main(int argc, const char *argv[])
{
printf("first call %d\n", status());
printf("second call %d\n", status());
return 0;
}
nota, lo scopo del guasto status()
la funzione era mantenere uno stato. Mi aspettavo di ricevere un avviso per questo con -Wall
. Ho provato anche -Wunreachable-code
, -Wextra
, -pedantic
e -ansi
(come è stato discusso here). Eppure, nessuno di questi mi dà un avvertimento.
Sembra che gcc rimuova silenziosamente l'assegnazione della variabile statica.
A mio parere le opzioni gcc -Wall -Werror
dovrebbero generare un errore.
Ma la first_time = 0 assegnazione non può mai essere raggiunto. Qual è lo scopo di -Wunreachable-code, se non solleva alcun avviso per codice unreachalbe come questo? –
Anche il tuo esempio è diverso. Il tuo "codice numeroso" può essere raggiunto, a seconda del valore di argc. –