Wie universell wird C99 unterstützt?

Lesezeit: 4 Minuten

Benutzeravatar von Eli Bendersky
Eli Bendersky

Wie universell wird der C99-Standard von heutigen Compilern unterstützt? Ich verstehe, dass nicht einmal GCC es vollständig unterstützt. Ist das richtig?

Welche Features von C99 werden mehr unterstützt als andere, dh mit welchen kann ich ziemlich sicher sein, dass mich die meisten Compiler verstehen?

  • Bibliotheken nicht vergessen. Neben netter Syntax (wie Named struct initializers) fügt C99 viele nützliche mathematische Bibliotheksfunktionen hinzu, wie long lrtint(double); was die schnelle Rundungsoperation macht, die Sie sonst wie (long)(x + 0.5) hacken müssen.

    – Peter Cordes

    9. Dezember 2009 um 21:06 Uhr

  • Der Hochleistungs-PGCC-Compiler der Portland Group ist zu 100 % C99-kompatibel.

    – Z-Boson

    28. Oktober 2013 um 15:18 Uhr

Benutzeravatar von KovBal
KovBal

Wenn Sie portablen C-Code schreiben möchten, würde ich Ihnen vorschlagen, in C89 (alter ANSI-C-Standard) zu schreiben. Dieser Standard wird von den meisten Compilern unterstützt.

Der Intel C-Compiler hat sehr gute C99-Unterstützung und es produziert schnelle Binärdateien. (Vielen Dank 0x69!)

MSVC unterstützt einige neue Funktionen und Microsoft planen, die Unterstützung in zukünftigen Versionen zu erweitern.

GCC unterstützt einige neue Sachen von C99. Sie erstellten eine Tabelle über die Status der C99-Funktionen. Das wahrscheinlich nützlichste Feature von C99 ist das Array mit variabler Länge, und GCC unterstützt es jetzt. Klirren (LLVMs C-Fronted) unterstützt die meisten Funktionen mit Ausnahme von Gleitkomma-Pragmas.

Wikipedia scheint eine zu haben schöne Zusammenfassung der C99-Unterstützung der Compiler.

  • Meinst du mit ANSI C C89/C90? Weil ANSI C und ISO C früher Synonyme waren, aber ich verstehe, dass sich ISO C jetzt auf C99 bezieht

    – Eli Bendersky

    26. September 2008 um 13:30 Uhr

  • GCC 4.5 listet endlich Arrays mit variabler Länge als auf Fertig und nicht Gebrochen!

    – u0b34a0f6ae

    23. Juni 2010 um 12:14 Uhr

  • @kaizer.se : Danke, dass du uns das mitgeteilt hast.

    – KovBal

    23. Juni 2010 um 12:51 Uhr

  • -1. Intel hat keine volle Unterstützung für c99. Es fehlt lange Doppel

    – Agnius Vasiliauskas

    2. Mai 2012 um 8:37 Uhr

  • Interessant ist auch, dass es nicht kommerzielle Versionen von Intel-Compilern gibt nur für Linux verfügbar.

    – Agnius Vasiliauskas

    3. Mai 2012 um 7:05 Uhr

Benutzeravatar von Michael Burr
Michael Burr

Jemand erwähnte, dass der Intel-Compiler C99-Unterstützung hat. Es gibt auch die Comeau C/C++-Compiler die C99 vollständig unterstützt. Das sind die einzigen die mir bekannt sind.

C99-Funktionen, die ich nicht verwende, weil sie nicht gut unterstützt werden, sind:

  • Arrays mit variabler Länge
  • Makros mit variabler Anzahl von Parametern.

C99-Funktionen, die ich regelmäßig verwende und die anscheinend ziemlich gut unterstützt werden (außer von Microsoft):

  • stdint.h
  • snprintf() – MS hat einen Nicht-Standard _snprintf() das hat schwerwiegende Einschränkungen, da es den Puffer nicht immer mit null beendet und nicht angibt, wie groß der Puffer sein sollte

Um den Nicht-Support von Microsoft zu umgehen, verwende ich a gemeinfrei stdint.h von MinGW (das ich so modifiziert habe, dass es auch auf VC6 funktioniert) und a fast gemeinfrei snprintf() von Holger Weiss

Zu den Elementen, die von Microsoft nicht unterstützt werden, aber je nach Projekt weiterhin auf anderen Compilern verwendet werden, gehören:

  • gemischte Deklarationen und Code
  • Inline-Funktionen
  • _Pragma() – Dadurch werden Pragmas viel benutzerfreundlicher

  • Ja – VS2010 hat einige der C99-Dinge hinzugefügt, die in C++0x integriert wurden. stdint.h ist eine der wichtigeren Ergänzungen.

    – Michael Burr

    18. August 2011 um 22:17 Uhr

  • VS2013 unterstützt gemischte Deklarationen und Code und snprintf ist in der nächsten Revision von Visual Studio geplant.

    – Etienne

    14. Mai 2014 um 12:55 Uhr

Für gcc gibt es eine Tabelle mit allen unterstützten Funktionen. Es scheint, dass das größte, was fehlt, Arrays mit variabler Länge sind. Die meisten anderen fehlenden Funktionen sind eher Bibliotheksprobleme als Sprachfunktionen.

  • VLAs werden seit gcc 4.5 vollständig unterstützt.

    – Etienne

    14. Mai 2014 um 12:39 Uhr


Der IBM c-Compiler unterstützt c99, wenn er als c99 aufgerufen wird, aber nicht, wenn er als cc oder xlc aufgerufen wird.

Ansehen C99-Unterstützungsstatus für GNU für Einzelheiten darüber, welche Funktionen derzeit unterstützt werden.

Sonnenstudio soll angeblich die gesamte C99-Spezifikation unterstützen. Ich habe sie nie benutzt, daher kann ich das nicht bestätigen.

Ich glaube nicht, dass der Microsoft-Compiler die C99-Spezifikation vollständig unterstützt. Sie konzentrieren sich im Moment viel mehr auf C++

Benutzeravatar von Mike Dimmick
Mike Dimmick

Microsoft scheint C++-Standards zu verfolgen, hat aber keine Unterstützung für C99. (Sie können einige Funktionen herauspicken, aber man könnte sagen, dass sie C++0x herauspicken, wo es eine Überschneidung gibt.)

Ab Visual Studio .NET 2003 ist bei neuen Projekten die Option „C-Code als C++ (/TP) kompilieren“ standardmäßig aktiviert.

Benutzeravatar von Cromulent
Kromulent

Clang (der LLVM-basierte C- und C++-Compiler) bietet ziemlich gute C99-Unterstützung. Ich denke, das einzige, was es nicht unterstützt, sind die Gleitkomma-Pragmas.

1406790cookie-checkWie universell wird C99 unterstützt?

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

Privacy policy