GCC typeof Erweiterung

Ich verstehe nicht, warum das funktioniert:

/* gcc range extension */
__extension__ static int fn(int n)
{
    switch (n) {
        case 0: return 0;
        case 1 ... 1000: return 1;
        default: return -1;
    }
}

Aber nicht:

/* gcc typeof extension */
__extension__ static void fn(int n)
{
    typeof(n) a = n;

    printf("%d\n", a);
}

gcc gibt:

demo.c:14: warning: implicit declaration of function typeof
demo.c:14: warning: nested extern declaration of typeof
demo.c:14: error: expected ‘;’ before a
demo.c:16: error: a undeclared (first use in this function)
demo.c:16: error: (Each undeclared identifier is reported only once
demo.c:16: error: for each function it appears in.)

Ich weiß, ich kann kompilieren mit -std=gnu99 um den Fehler zu vermeiden, aber die erste funktioniert mit -std=c99 und verwendet auch eine Erweiterung

Schreibe einen Kommentar