20

この例では、 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;
}

faultystatus()関数の目的はステータスを維持することであることに注意してください。でこれに対する警告が表示されることを期待していました-Wall-Wunreachable-code-Wextra-pedanticおよび-ansi(ここで説明したように)も試しました。それでも、それらのどれも私に警告を与えません。

gcc は、静的変数の割り当てを黙って削除しているようです。

私の意見では、gcc オプション-Wall -Werrorはエラーをスローするはずです。

4

2 に答える 2