我想知道为什么gcc (4.6.3)没有给我这个示例中无法访问的代码的警告:
#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;
}
请注意,故障status()
功能的目的是保持状态。我原以为会收到警告-Wall
。我也试过-Wunreachable-code
, -Wextra
, -pedantic
and -ansi
(正如这里讨论的那样)。然而,这些都没有给我一个警告。
看起来 gcc 默默地删除了静态变量赋值。
我认为 gcc 选项-Wall -Werror
应该会引发错误。