Frage

Wie allgemein der C99-Standard ist in der heutigen Compiler unterstützt? Ich verstehe, dass nicht einmal GCC unterstützt dies vollständig. Ist das richtig?

Welche von C99-Funktionen werden unterstützt mehr als andere, das heißt, das kann ich ganz sicher sein, verwenden, dass die meisten Compiler mich verstehen?

War es hilfreich?

Lösung

Wenn Sie portable C-Code schreiben wollen, dann würde ich vorschlagen, dass Sie in C89 (alter ANSI-C-Standard) zu schreiben. Dieser Standard wird von den meisten Compilern unterstützt.

Der Intel C Compiler hat sehr gut C99 Unterstützung und es produziert schnelle Binärdateien. (Danke 0x69 !)

MSVC unterstützt einige neuen Features und Microsoft plane Unterstützung in zukünftigen Versionen zu erweitern.

GCC unterstützt einige neue Dinge von C99. Sie erstellt eine Tabelle über den Status von C99 verfügt über . Wahrscheinlich die nutzbare Funktion von C99 ist die variable Länge Array und GCC unterstützt es jetzt. Clang (LLVM der C konfrontiert) unterstützt die meisten Funktionen mit Ausnahme Gleitkommazahlen Pragmas.

scheint Wikipedia schöne Zusammenfassung der C99 Unterstützung der Compiler.

Andere Tipps

Jemand erwähnte die Intel-Compiler C99-Unterstützung. Es besteht auch die Comeau C / C ++ Kompilierer die C99 voll unterstützt. Dies sind die einzigen, die ich kenne.

C99-Funktionen, die ich nicht verwenden, weil sie nicht gut unterstützt:

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

C99 Funktionen, die ich regelmäßig, die ziemlich gut unterstützt scheinen verwenden werden (mit Ausnahme von Microsoft):

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

um Microsofts Nicht-Unterstützung zu umgehen, verwende ich eine public domain stdint.h von MinGW ( dass ich modifizierte auch auf VC6 arbeiten) und ein fast public domain snprintf() von Holger Weiss

Produkte, die nicht von Microsoft unterstützt werden, aber immer noch auf anderen Compiler verwenden, um auf dem Projekt abhängig sind:

  • gemischte Erklärungen und Code
  • Inline-Funktionen
  • _Pragma() - das macht pragmas viel mehr verwendbar

Für gcc gibt es eine Tabelle mit allen unterstützten Funktionen. Es scheint zu sein, dass die größte Sache, fehlende Arrays variabler Länge sind. Die meisten anderen fehlenden Features sind Bibliothek Probleme eher als Sprachfunktionen.

Der IBM C-Compiler hat c99 Unterstützung, wenn sie als c99 aufgerufen, aber nicht, wenn sie als cc oder xlc aufgerufen.

Lesen Sie C99 suport Status für GNU für Einzelheiten darüber, welche Funktionen noch unterstützt werden.

Sun Studio ist angeblich unterstützen den gesamten C99 spec. Ich habe noch nie verwendet sie, also kann ich nicht bestätigen.

Ich glaube nicht, der Microsoft-Compiler die C99-Spezifikation in vollem Umfang unterstützt. Sie sind viel stärker auf C ++ zur Zeit

Clang (die LLVM basierte C und C ++ Compiler) hat ziemlich gute C99-Unterstützung. Ich denke, das einzige, was sie nicht sind die Floating-Point-Pragmas nicht unterstützt.

Microsoft erscheinen C ++ Standards zu Tracking, haben aber keine Unterstützung für C99. (Sie können einige Merkmale herauspicken, konnte aber gesagt werden Rosinenpickerei C ++ 0x sein, wo es eine Überlappung.)

Wie von Visual Studio .NET 2003, neue Projekte haben den 'Compilieren von C-Code als C ++ (/ TP)' Option standardmäßig aktiviert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top