Kompatibilität

Die Universal C Runtime Library (UCRT) unterstützt den größten Teil der C-Standardbibliothek, die für die C++-Konformität erforderlich ist. Es implementiert die C99 (ISO/IEC 9899:1999)-Bibliothek mit bestimmten Ausnahmen:

  • strenge Typkompatibilität in <complex.h>.
  • aligned_alloc, was wahrscheinlich nicht implementiert wird, da das Windows-Betriebssystem keine ausgerichteten Zuordnungen unterstützt. Verwenden Sie stattdessen den nicht standardmäßigen _aligned_malloc.
  • strerrorlen_s
  • atomische Unterstützung in <stdatomic.h>
  • Threadingunterstützung in <threads.h>

Die UCRT implementiert auch eine große Teilmenge der POSIX.1 (ISO/IEC 9945-1:1996, die POSIX System Application Program Interface) C-Bibliothek. Es ist jedoch nicht vollständig konform mit einem bestimmten POSIX-Standard. Das UCRT implementiert auch mehrere microsoftspezifische Funktionen und Makros, die nicht Teil eines Standards sind.

Die für die Microsoft-Implementierung von Visual C++ spezifischen Funktionen befinden sich in der vcruntime-Bibliothek. Viele dieser Funktionen dienen zur internen Verwendung und können nicht von Benutzercode aufgerufen werden. Einige sind für den Gebrauch beim Debuggen und aus Gründen der Implementierungskompatibilität dokumentiert.

Im C++-Standard sind Namen, die im globalen Namespace mit einem Unterstrich beginnen, für die Implementierung reserviert. Sowohl die POSIX-Funktionen als auch die microsoftspezifischen Laufzeitbibliotheksfunktionen befinden sich im globalen Namespace, sind jedoch nicht Teil der C-Laufzeitbibliothek. Deshalb haben die bevorzugten Microsoft-Implementierungen dieser Funktionen einen führenden Unterstrich. Aus Gründen der Portierbarkeit unterstützt die UCRT außerdem die Standardnamen. Der Microsoft Visual C++-Compiler gibt jedoch beim Kompilieren von Code eine Veraltungswarnung aus, wenn dieser Standardnamen verwendet. Nur die Standardnamen sind veraltet, nicht die Funktionen selbst. Um die Warnung zu unterdrücken, definieren Sie _CRT_NONSTDC_NO_WARNINGS , bevor Sie Header in den Code einschließen, in denen die ursprünglichen POSIX-Namen verwendet werden. Da der C-Standard standardmäßig keine nicht standardmäßigen Namen in Headerdateien /std:c11 zulässt und /std:c17 die Standardnamen für POSIX-Funktionen, -Typen und -Makros nicht verfügbar macht. Wenn diese Namen erforderlich sind, definieren Sie _CRT_DECLARE_NONSTDC_NAMES diese, um sie verfügbar zu machen.

Bestimmte Funktionen in der Standard-C-Bibliothek wurden in der Vergangenheit aufgrund missbräuchlich verwendeter Parameter und nicht deaktivierter Puffer häufig unsicher verwendet. Diese Funktionen stellen oft die Ursache von Sicherheitsproblemen im Code dar. Microsoft hat eine Reihe sichererer Versionen dieser Funktionen erstellt, die die Parameternutzung überprüfen. Sie rufen den ungültigen Parameterhandler auf, wenn ein Problem zur Laufzeit erkannt wird. Standardmäßig gibt der Microsoft Visual C++-Compiler eine Veraltungswarnung aus, wenn eine Funktion verwendet wird, zu der eine sicherere Variante verfügbar ist. Wenn Sie Den Code als C++ kompilieren, können Sie als 1 definieren _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES , um die meisten Warnungen zu beseitigen. Mit diesem Makro können Vorlagenüberladungen die sichereren Varianten aufrufen, während Standard tragbaren Quellcode beibehalten werden. Um die Warnung zu unterdrücken, definieren Sie _CRT_SECURE_NO_WARNINGS , bevor Sie Header in den Code einschließen, die diese Funktionen verwenden. Weitere Informationen finden Sie unter Sicherheitsfeatures im CRT.

Sofern nicht in der Dokumentation zu bestimmten Funktionen anders vermerkt, ist die UCRT mit der Windows-API kompatibel. Bestimmte Funktionen werden in Windows Store- oder Universelle Windows-Plattform-Apps (UWP) nicht unterstützt. Diese Funktionen werden in CRT-Funktionen aufgeführt, die in Universelle Windows-Plattform Apps nicht unterstützt werden.

Titel Beschreibung
UWP-Apps, die Windows-Runtime und die C-Laufzeit Beschreibt, wann UCRT-Routinen nicht mit universellen Windows-Apps oder Microsoft Store-Apps kompatibel sind.
ANSI C-Konformität Beschreibt standardkonforme Namen im UCRT.
UNIX Enthält Richtlinien zum Portieren von Programmen zu UNIX.
Windows-Plattformen (CRT) Listet die Betriebssysteme auf, die CRT unterstützt.
Abwärtskompatibilität Beschreibt, wie alte CRT-Namen neuen zugeordnet werden.
C-Runtime-Dateien (CRT) und C++ Standard Library (STL) .lib Bietet eine Übersicht über die CRT-Bibliotheksdateien (.lib) und über die zugehörigen Compileroptionen.