Zastanawiam się dlaczego gcc (4.6.3) daje mi żadnego ostrzeżenia dla martwy kod w poniższym przykładzie:gcc nie ostrzega o martwy kod
#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;
}
pamiętać, że cel wadliwego status()
funkcja miała utrzymywać status. Spodziewałem się ostrzeżenia o tym z -Wall
. Próbowałem również -Wunreachable-code
, -Wextra
, i -ansi
(jak to zostało omówione here). Jednak żadne z nich nie daje mi ostrzeżenia.
Wygląda, że gcc po cichu usuwa przypisanie zmiennej statycznej.
Moim zdaniem opcje gcc -Wall -Werror
powinny spowodować błąd.
Ale first_time = 0 Przyporządkowanie nigdy nie może być osiągnięty. Jaki jest cel - kod Wunreachable, jeśli nie podnosi ostrzeżenia o kodzie unreachalbe? –
Również twój przykład jest inny. Twój "kod" może być osiągnięty, w zależności od wartości argc. –