Frage

ich in der Regel schreiben C-Code in C89, jetzt einige Funktionen von C99 (wie intxx_t oder __VA_ARGS__ oder snprintf) sind sehr nützlich und kann sogar lebenswichtig sein.

Bevor ich mehr meine Anforderungen von C89 bis C99 Ich wollte etwas von C99 Funktionen kennen wurden weithin unterstützt und welche waren nicht weit unterstützt oder sogar schädlich betrachtet.

Ich weiß, wir können nur unser Ziel Compiler-Unterstützung überprüfen, aber dies würde unsere Unterstützung viel verengen, und da dies für Open-Source-Software ist, würde ich es vorziehen, eine breitere Unterstützung haben.

Zum Beispiel verwenden wir Solaris (suncc) Compiler und gcc, aber es könnten auch andere Compiler sein, die wir von der Art und Weise bewegen würden, während wir die Kompatibilität mit sehr wenig Anstrengungen halten konnten.

Zum Beispiel habe ich nie auf Windows gearbeitet, noch ich weiß nichts über Windows-Compiler, aber es wäre gut, Windows-Kompatibilität zu halten.

War es hilfreich?

Lösung

Eine Reihe von C99 Funktionen sind optional, so dass ihr Mangel nicht technisch nichtkonformen ist. Ich werde nicht unten unterscheiden.

  • Hmm, Sieg nicht <stdint.h> haben, obwohl es eine offene -source Version von stdint.h für Microsoft . Selbst wenn die Datei implementiert ist, sind viele der einzelnen Typen fehlen.

  • Komplexe und imaginäre Unterstützung oft fehlt oder gebrochen.

  • Erweiterte Identifikatoren und breite Zeichen können Problempunkte sein.

Siehe diese Liste der C99-Funktion Fragen in gcc.

Andere Tipps

goto ist noch schädlich betrachtet.


Irgendwie habe ich gesammelt vier nach unten Stimmen. Ich stellte die Aussage über levity hinzuzufügen, und ist nur 30% ernst über das Konzept dahinter.

erwarte ich, dass die nach unten Stimmen von Jugendlichen sind, die die Geschichte nicht verstehen, Sprachen zu programmieren. Nicht jeder einzelne goto ist böse, aber-im Vergleich zu 100% unverfälscht Spaghetti-Code I auf (Millionen von Zeilen von Fortran 66) gearbeitet haben, -es ist sinnvoll und produktiv wie viele goto Aussagen mit strukturierten Aussagen zu ersetzen (for, while, do .. while, switch) wie möglich. Aber manchmal ein goto ist nur gut, wenn es vermeidet die Komplexität, wie zusätzliche Flag-Variablen von mehreren verschachtelten Schleifen auszubrechen.

Nun, gcc ist im Grunde geht gcc sein, unabhängig davon, welche Desktop-O Sie Targeting.

Visual C ++, ist in erster Linie eine C ++ Compiler, ist nicht ganz so mit dem C99 spec betroffen. stdint.h ist Ihre Lieblings intxx_t Makros deklarieren. __VA_ARGS__ ist vorhanden. _Bool, _Complex und _Pragma nicht auf der Microsoft Visual C ++ Compiler implementiert. Ich bin mir ziemlich sicher% ein Feld in printf / scanf nicht umgesetzt wurde, wenn auch vielleicht VC2010 Griffe sie. snprintf vorhanden ist, hat aber einen führenden Unterstrich und etwas andere Semantik.

Kurze Antwort: Die „einfacher“ eine C99-Funktion ist ohne Änderung Compiler Grammatiken oder replumbing die Standard-Bibliothek zu implementieren, desto wahrscheinlicher VC ++ ist es zu unterstützen. Wenn es ein Konflikt zwischen C99 und C ++, C ++ erwarten, um zu gewinnen.

Runtime sizeof ist ein Alptraum der Compiler Schriftsteller. So halte ich für schädlich ist.

glibc implementieren keine C99-konforme realloc, so realloc(ptr, 0) nicht tragbar ist.

http://sourceware.org/bugzilla/show_bug.cgi?id=12547

wurde restrict ein Stichwort in C99. Das ist Implementierung eingreifend auf den Benutzernamespace. Wenn Sie ein gültiges C89-Programm, das das Wort restrict enthält, müssen Sie das Programm ändern, um es mit C99 zu arbeiten. Mit anderen Worten: keine Abwärtskompatibilität. Wenn sie die Abwärtskompatibilität brechen würden, sollten sie entfernt gets von der ersten Standard haben.

Die Art generische Funktionen Mathematik von <tgmath.h> sind nicht notwendigerweise weitgehend umgesetzt, obwohl sie scheinen mit GCC 4.2.1 auf MacOS X 10.6.2 zur Verfügung gestellt werden.

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