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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht ANSI-kompatibel sind keywords nicht immer wieder aktiviert durch
__extension__
(der einzige Effekt von__extension__
ist Warnung Unterdrückung für-pedantic
). Verwenden__typeof__
wenn Sie kompilieren möchten, die im ANSI-Modus.#define typeof __typeof__
vermeidet das problem?Wenn Sie schreiben eine header-Datei, die arbeiten müssen, wenn in der ISO-C-Programme schreiben
__typeof__
statttypeof
.Finden Sie auf dieser link für eine ausführlichere Beschreibung und die möglichen Korrekturen.
Hinweis:
__extension__
hat keine Auswirkungen, abgesehen von der Unterdrückung der Warnungen bei der Verwendung von ANSI C-pedantic
- Modus.So etwas wie dieses: