Dlaczego GCC nie ostrzega przed nieosiągalnym kodem?
zastanawiam się dlaczegogcc (4.6.3) nie daje mi ostrzeżenia dlanieosiągalny kod w tym przykładzie:
#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;
}
Uwaga, cel wadliwegostatus()
funkcją było utrzymanie statusu. Spodziewałem się na to ostrzeżenia-Wall
. Próbowałem też-Wunreachable-code
, -Wextra
, -pedantic
i-ansi
(tak jak zostało to omówionetutaj). Jednak żaden z nich nie ostrzega mnie.
Wygląda na to, że gcc bezgłośnie usuwa przypisanie zmiennej statycznej.
Moim zdaniem opcje gcc-Wall -Werror
powinien zgłosić błąd.