Gibt es eine Möglichkeit, in Visual Studio zwischen C99- und C11-C-Standards zu wechseln?

Lesezeit: 4 Minuten

Ich bin neu in der Visual Studio-Umgebung und verwende VS2017 Pro. Ich wollte ein einfaches Programm in C schreiben und mit beiden kompilieren c99 und c11 Normen. In Visual Studio konnte ich nur Compilerschalter nur für C++-Standards finden.

Wie können wir der Visual Studio-Umgebung mitteilen, mit der wir aktuellen Code kompilieren möchten c99 und c11 C-Standards.

Compiler-Schalter

Standardschalter

  • Soweit ich weiß, unterstützt der C-Compiler von Visual Studio C99 oder C11 nicht vollständig, daher scheint die Frage strittig zu sein.

    – Ninja im Ruhestand

    26. Februar 2018 um 5:19 Uhr

  • Für viele Zwecke kompiliert MSVC nur mit C90. Die von Ihnen verwendete Version bietet jedoch eine erheblich bessere Unterstützung für C99 als ältere Versionen von MSVC – aber soweit ich weiß, ist diese Unterstützung immer noch nicht vollständig.

    – Jonathan Leffler

    26. Februar 2018 um 5:32 Uhr

  • Sie müssten Microsoft fragen, aber ich habe den Eindruck, dass sie nicht daran interessiert sind, C-Standards zu verfolgen, sondern nur C++-Standards. Wenn es ein C++-Feature gibt, das ebenfalls in einem neueren als dem C90-Standard enthalten ist, wird es oft irgendwann auch dem C-Compilermodus hinzugefügt.

    – Michael Burr

    26. Februar 2018 um 5:36 Uhr


  • Kann jemand eine Antwort geben? Ich finde die Frage recht interessant und die Kommentare ergeben zusammen eine gute Antwort. Außerdem möchte ich aus der Liste der unbeantworteten Fragen praktisch beantwortete Fragen herausholen.

    – Yunnosch

    26. Februar 2018 um 6:22 Uhr

  • MSVC hat erst vor kurzem begonnen, Teile von c99 zu unterstützen, und ich habe noch nichts von einer Unterstützung für C11 gehört. Im Allgemeinen unterstützen sie die neueste Version, die sie unterstützen, ohne die Möglichkeit, eine frühere Version des Standards anzugeben. Ich glaube, sie haben dies erst kürzlich für C++ aufgrund von Breaking Changes zugelassen.

    – Shafik Yaghmour

    26. Februar 2018 um 7:00 Uhr

Benutzer-Avatar
Chuck Walbourn

Die einzigen ‘Modi’, die von Visual C++ unterstützt werden, sind: /std:c++14 Modus für C++14-Konformität (Standard), /std:c++17 Modus für die C++17-Unterstützung, die ab VS 2017 (15.6) nicht ganz vollständig ist. Da ist auch ein /std:c++latest -Modus, der irgendwann Dinge in C++20 beinhalten wird. All dies sollte kombiniert werden /permissive- für verbesserte Konformität.

Um die Konformität mit der C++11-Standardbibliothek zu erfüllen, muss Visual C++ die C99-Standardbibliothek unterstützen, das ist nicht dasselbe wie die Unterstützung der C99-Sprachkonformität.

Irgendwann muss Visual C++ die C11-Standardbibliothek unterstützen, um die Anforderungen der C++17-Standardbibliothek zu erfüllen, und auch das ist nicht dasselbe wie die Konformität mit der C11-Sprache.

Sehen C++-Standardkonformität von Microsoft und C++11/14 STL-Funktionen, Korrekturen und wichtige Änderungen in VS 2013

Es gibt einen Kommentarthread im Beitrag MSVC: Die beste Wahl für Windows wo sich ein Visual C++-Projektmanager der Frage nach echter ‘C11’-Konformität annimmt.

Hallo Onur,

Die C-Konformität ist auf unserem Radar, obwohl wir uns zuerst auf die C++-Konformität konzentrieren.
Wir haben in VS 2013 etwas an der C-Konformität gearbeitet, obwohl wir es nicht viel veröffentlicht haben. Diese Arbeit beinhaltete:
– C99 _Bool
– C99 zusammengesetzte Literale
– C99 designierte Initialisierer
– C99-Variablendeklarationen
Wir nähern uns dem Ende unserer C++-Konformitätsarbeit. Eines der letzten Elemente ist ein konformer Präprozessor: ein gemeinsames Merkmal von C und C++. Der Präprozessor markiert den Beginn unseres C-Konformitätsschubs sowie das Ende unserer C++98/11/14-Konformitätsarbeit.

Andreas

AKTUALISIEREN: VS 2019 (16.8) enthält /std:c11 und /std:c17 Standardschalter. Sehen diesen Blogbeitrag. Da der MSVC-Compiler keine Arrays mit variabler Länge (VLA) unterstützt, beansprucht er keine C99-Konformität. Beachten Sie, dass diese Schalter den neuen C99-Präprozessor aktivieren, der behandelt wird diesen Blogbeitrag.

Benutzer-Avatar
Lundin

Visual Studio ist hauptsächlich ein C++-Compiler. Im “C-Modus” folgt es einem alten C-Standard von 1990.

Zwischen 2013 und 2015 unternahmen sie einige Anstrengungen, um nicht den aktuellen, sondern den vorherigen C-Standard von 1999 (“C99”) zu unterstützen, etwa 16 Jahre nach seiner Veröffentlichung. Die Arbeiten zur Einhaltung dieser Norm sind jedoch noch nicht abgeschlossen.

Ich glaube, der Compiler unterstützt auch einige ausgewählte Features der aktuellen C-Sprache (“C11”), wie die optionale Bibliothek zur Überprüfung von Grenzen. Dieser Standard ist seit 7 Jahren verfügbar, wird aber nicht vollständig unterstützt.

Wenn Sie also einen konformen C-Compiler benötigen, sollten Sie nach anderen Alternativen suchen.

  • Ein Grund, warum man möglicherweise einen C-Compiler benötigt, könnte sein, wenn man gegen die Microsoft Windows-API programmiert, die in C geschrieben ist. Wenn Sie also Windows-Programmierung durchführen möchten, würde ich raten, einen anderen Compiler zu wählen.

    – Ludin

    28. Februar 2018 um 11:54 Uhr

  • Ludin danke für die Information, welchen C-Compiler bevorzugst du? Intel C Compiler, GCC oder Clang unter Windows 10 und Ubuntu/Raspbian?

    Benutzer9411335

    1. März 2018 um 10:08 Uhr


  • @Dinithi GCC/Mingw und gelegentlich Embarcadero (das wie VS hauptsächlich ein C++-Compiler ist). Die anderen habe ich nicht oft benutzt.

    – Ludin

    1. März 2018 um 10:16 Uhr

  • Ich habe kürzlich Embarcadero (Borland) C/ C++ ausprobiert, eine Art alte Schule. 🙂 Ich werde mit GCC gehen.

    Benutzer9411335

    1. März 2018 um 10:23 Uhr


  • Sie können die Windows-API von C++ absolut verwenden. Die Header haben alle extern "C" in ihnen.

    – kibibu

    18. Oktober 2018 um 23:01 Uhr

1116470cookie-checkGibt es eine Möglichkeit, in Visual Studio zwischen C99- und C11-C-Standards zu wechseln?

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

Privacy policy