Ich habe die Compiler-Option GNU99 und C99 gesehen. Was ist der Unterschied von ihnen? Irgendwelche Detaildokumentationen? (Klang, Xcode, Mac OS X)
Was ist der Unterschied zwischen GNU99 und C99 (Clang)?
Äonil
Matt Tischler
Unterschiede zwischen verschiedenen Standardmodi
clang unterstützt die Option -std, die ändert, welchen Sprachmodus clang verwendet. Die unterstützten Modi für C sind c89, gnu89, c94, c99, gnu99 und verschiedene Aliase für diese Modi. Wenn keine Option -std angegeben ist, geht clang standardmäßig in den gnu99-Modus.
Unterschiede zwischen allen c*- und gnu*-Modi:
- c*-Modi definieren
__STRICT_ANSI__
.- Zielspezifische Definitionen ohne vorangestellte Unterstriche, wie “linux”, werden in gnu*-Modi definiert.
- Trigraphen sind im gnu*-Modus standardmäßig ausgeschaltet; Sie können durch die aktiviert werden
-trigraphs
Möglichkeit.- Der Parser erkennt “asm” und “typeof” als Schlüsselwörter in gnu*-Modi; die Varianten
__asm__
und__typeof__
werden in allen Modi erkannt.- Die Apple-Erweiterung “blocks” wird auf einigen Plattformen standardmäßig im gnu*-Modus erkannt; Es kann in jedem Modus mit aktiviert werden
-fblocks
Möglichkeit.
Weitere Verbindungen
- Optionen zur Steuerung des C-Dialekts für GCC
- Erweiterungen der C-Sprachfamilie
- Clang-Spracherweiterungen
- Nützliche GCC-Flags für C
Paul R
C99 ist reines C99, GNU99 ist C99 mit GNU-Erweiterungen. Siehe die GCC-Manpage.
-
@Rob: Nun, es ist wirklich sowohl eine Untermenge als auch eine Obermenge, weil ihm anscheinend einige C99-Funktionen fehlen, aber es hat auch GNU-Erweiterungen.
– PaulR
10. Oktober 2013 um 10:29 Uhr
C99 ist einfach die Version des C-Standards ab 1999, wie wir ihn alle kennen. In GCC wird es nicht vollständig unterstützt.
GNU99 ist eine Erweiterung von C99, genauso wie GNU98 eine Erweiterung von C98 ist. Aus den Dokumenten:
ISO C99 plus GNU-Erweiterungen. Wenn ISO C99 vollständig in GCC implementiert ist, wird dies zum Standard. Der Name gnu9x ist veraltet.
Clang unterstützt auch diese Erweiterungen.
-
Ich habe etwas gefunden. Wollen Sie das erwähnen? gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions
– Äonil
15. März 2011 um 15:00 Uhr
-
Diese Liste ist stark veraltet; Viele der Dinge in der Liste sind keine Erweiterungen aber seit 12 Jahren Teil der Standard-C-Sprache.
– R.. GitHub HÖR AUF, EIS ZU HELFEN
15. März 2011 um 18:09 Uhr
-
@R.. Die Seite aus dem Kommentar von Eonil sagt auch, dass einige der Erweiterungen tatsächlich Teil des Standards sind. Es ist also nicht veraltet, wenn man es so betrachtet.
– Benutzer142019
15. März 2011 um 18:18 Uhr
-
Es macht die Liste immer noch ziemlich nutzlos, um die Frage von OP zu beantworten.
– R.. GitHub HÖR AUF, EIS ZU HELFEN
15. März 2011 um 18:31 Uhr
-
Entschuldigung, gnu99 ist eine Teilmenge von c99, siehe gcc.gnu.org/c99status.html für das, was derzeit fehlt.
– Rob Wells
10. Oktober 2013 um 9:25 Uhr
Aus dem Kontext gehe ich davon aus, dass Sie über gcc sprechen. Zum Beispiel,
icc -std=c99
undgcc -std=c99
sind sehr verschieden.– Benutzer510306
16. März 2011 um 22:35 Uhr
@user510306: “(KlirrenXcode, Mac OS X)”
– mk12
8. August 2012 um 16:33 Uhr