Was ist der offizielle Status der C99-Unterstützung in VS2013?

Lesezeit: 4 Minuten

Ich sehe, dass VS2013 Unterstützung für eine große Anzahl wichtiger Kernsprachenfunktionen von C99 hinzugefügt hat. Jetzt unterstützt es zusammengesetzte Literale, designierte Initialisierer, variadische Makros, verschachtelte Deklarationen und Anweisungen, um nur einige zu nennen.

Dies weist darauf hin, dass VS-Entwickler ernsthafte Schritte in Richtung C99-Unterstützung in Visual Studio unternommen haben. Einige dieser Funktionen sind jedoch nicht Teil der C++-Sprache, was eine bemerkenswerte Abweichung von der zuvor angekündigten Entwicklungsstrategie zu sein scheint (z. B. “VS C-Compiler unterstützt nur die C99-Funktionen, die auch Teil von C++ sind”).

Also, gibt es irgendein offizielles oder halboffizielles Wort darüber, was los ist? Im Netz finde ich nichts eindeutiges. Wurden diese C99-Features offiziell angekündigt? Gibt es eine Verpflichtung zur fortgesetzten C99-Unterstützung in VS? Oder ist das nur eine Art “Schurken” inoffizielle Entwicklung?

  • Herb Sutter erwähnte, dass sie genug hinzugefügt haben, um ffmpeg auf VS2013 kompilieren zu können, keine Ahnung, wie sie auf diese Anforderung gekommen sind.

    – Prätorianer

    7. Januar 2015 um 18:45 Uhr

  • msdn.microsoft.com/en-us/library/hh409293.aspx

    – BLUEPIXY

    7. Januar 2015 um 18:50 Uhr

  • Ich habe hier auf ihren letzten C99 verlinkt

    – Shafik Yaghmour

    7. Januar 2015 um 18:50 Uhr

  • Sie leisten erhebliche Arbeit am Frontend für die C++1xyz-Konformität. Berühren alter Bits, die für den Betrieb mit 256 KB Speicher ausgelegt waren. Zweifellos eröffnete das einige neue Möglichkeiten 🙂

    – Hans Passant

    7. Januar 2015 um 20:32 Uhr

Benutzer-Avatar
Shafik Yaghmur

Es gibt einige öffentliche offizielle Diskussionen darüber von Microsoft-Entwicklern, the C++-Konformitäts-Roadmap was sagt:

Herb kündigte außerdem an, dass die RTM-Version als Reaktion auf Kundenanfragen auch einige taktische C99-Spracherweiterungen beim Kompilieren von C-Code enthalten wird, sodass einige beliebte Community-Bibliotheken (einschließlich FFmpeg) nun in der Lage sein werden, mit Visual C++ 2013 zu kompilieren.

Dies hat also offizielle Unterstützung, ist aber strategisch, wie ich aus den folgenden Artikeln entnehmen kann, muss mehr Unterstützung mit anderen Prioritäten konkurrieren.

Wir haben das C++11/14 STL-Features, Fixes und Breaking Changes in VS 2013 Blog-Eintrag von STL:

Darüber hinaus werden einige Funktionen der C99 Core Language in 2013 RTM implementiert:

  • C99 _Bool

  • C99 zusammengesetzte Literale

  • C99 designierte Initialisierer

  • C99-Variablendeklarationen

und C99-Bibliotheksunterstützung in Visual Studio 2013-Blogeintrag von Pat Brenner was öffnet mit:

In diesem Blogbeitrag möchte ich einige Informationen über die C99-Unterstützung teilen, die der C-Laufzeitbibliothek in Visual Studio 2013 hinzugefügt wurde.

und endet mit:

Wir wissen, dass dies keine vollständige Unterstützung der C99-Bibliotheksfunktionen ist. Nach unserem besten Verständnis sind die fehlenden Teile diese:

  • Der Header tgmath.h fehlt. Für diesen Header ist C-Compiler-Unterstützung erforderlich. Beachten Sie, dass der Header ctgmath hinzugefügt wurde – dies ist möglich, weil dieser Header den Header tgmath.h nicht benötigt – nur die Header ccomplex und cmath.
  • Der Header uchar.h fehlt. Dies ist aus dem C Unicode TR. Mehrere Formatbezeichner in der printf-Familie werden noch nicht unterstützt.
  • Die Funktionen snprintf und snwprintf fehlen in stdio.h und wchar.h.

was etwas interessanter ist, da STL aktiv Kommentare an den Blog adressiert und sie schwer zusammenzufassen sind, aber wir können sehen, dass zukünftige Ergänzungen von konkurrierenden Prioritäten abhängen werden.

Danke an cremno für den Hinweis auf einen anderen Blogbeitrag C-Laufzeit (CRT)-Features, Fixes und Breaking Changes in Visual Studio 14 CTP1 was sagt:

In Visual Studio “14” CTP haben wir die C99-Standardbibliothek vollständig implementiert, mit Ausnahme aller Bibliotheksfunktionen, die von Compilerfunktionen abhängen, die noch nicht vom Visual C++-Compiler unterstützt werden (insbesondere <tgmath.h> ist nicht implementiert). Es gibt zweifellos noch einige Konformitätsprobleme – uns sind einige bekannt, darunter, dass _Exit fehlt und wcstok die falsche Signatur hat, und wir arbeiten daran, diese zu beheben. Wenn Sie einen Fehler oder eine fehlende Funktion finden, melden Sie dies bitte auf Microsoft Connect. Wenn Sie Fehler jetzt melden, besteht eine sehr gute Chance, dass wir sie vor RTM beheben können.

und hat viele Details, die sich nicht einfach zusammenfassen lassen.

  • Übrigens in VS2015 <uchar.h> und snprintf() stehen zur Verfügung. Es gibt auch andere C99-bezogene Änderungen. Sehen Dies älterer Blogbeitrag.

    – cremnr

    7. Januar 2015 um 20:02 Uhr


  • @cremno danke! Ich hatte ein paar Mal nach älteren Antworten zu VLAs gesucht und diese verpasst.

    – Shafik Yaghmour

    7. Januar 2015 um 20:07 Uhr


1229600cookie-checkWas ist der offizielle Status der C99-Unterstützung in VS2013?

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

Privacy policy