Kompatibilität

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

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

Die UCRT implementiert auch eine große Teilmenge der POSIX.1-Bibliothek (ISO/IEC 9945-1:1996, POSIX System Application Program Interface). Sie entspricht jedoch keinem bestimmten POSIX-Standard. Die UCRT implementiert auch mehrere Microsoft-spezifische 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 sind für die interne Verwendung vorgesehen und können nicht vom 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 Microsoft-spezifischen Laufzeitbibliotheksfunktionen befinden sich im globalen Namespace, sind aber nicht Teil der C-Standardruntimebibliothek. Aus diesem Grund weisen die bevorzugten Microsoft-Implementierungen dieser Funktionen einen führenden Unterstrich auf. 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 keine nicht standardmäßigen Namen in Headerdateien zulässt, werden standardmäßig /std:c11/std:c17 die Standardnamen für POSIX-Funktionen, -Typen und -Makros nicht verfügbar gemacht. Wenn diese Namen erforderlich sind, definieren Sie _CRT_DECLARE_NONSTDC_NAMES , 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 Parameterverwendung überprüfen. Sie rufen den Handler für ungültige Parameter auf, wenn zur Laufzeit ein Problem 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 Ihren Code als C++ kompilieren, können Sie als 1 definieren _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES , um die meisten Warnungen zu vermeiden. Dieses Makro ermöglicht Vorlagenüberladungen, die sichereren Varianten aufzurufen, während portabler Quellcode beibehalten wird. 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 Security Features in the 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 sind 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-Runtime Beschreibt, wann UCRT-Routinen nicht mit Universal Windows-Apps oder Microsoft Store-Apps kompatibel sind.
ANSI C-Konformität Beschreibt standardkonforme Namen in der UCRT.
UNIX Enthält Richtlinien zum Portieren von Programmen zu UNIX.
Windows Platforms (CRT) Listet die Betriebssysteme auf, die durch CRT unterstützt werden.
Abwärtskompatibilität Beschreibt, wie alte CRT-Namen neuen zugeordnet werden.
C-Laufzeitdateien (CRT) und STL-Dateien (C++-Standardbibliothek) .lib Bietet eine Übersicht über die CRT-Bibliotheksdateien (.lib) und über die zugehörigen Compileroptionen.