Was ist der Unterschied zwischen GNU99 und C99 (Clang)?

Lesezeit: 2 Minuten

Benutzeravatar von eonil
Äonil

Ich habe die Compiler-Option GNU99 und C99 gesehen. Was ist der Unterschied von ihnen? Irgendwelche Detaildokumentationen? (Klang, Xcode, Mac OS X)

  • Aus dem Kontext gehe ich davon aus, dass Sie über gcc sprechen. Zum Beispiel, icc -std=c99 und gcc -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


Benutzeravatar von Matt Joiner
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

Benutzeravatar von Paul R
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

1413230cookie-checkWas ist der Unterschied zwischen GNU99 und C99 (Clang)?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy