Dela via


Kompatibilitet

UCRT (Universal C Runtime Library) stöder det mesta av C-standardbiblioteket som krävs för C++-överensstämmelse. Det implementerar biblioteket C99 (ISO/IEC 9899:1999), med vissa undantag:

  • strikt typkompatibilitet i <complex.h>.
  • aligned_alloc, som förmodligen inte kommer att implementeras eftersom Windows-operativsystemet inte stöder justerade allokeringar. Använd den icke-standard _aligned_malloc istället.
  • strerrorlen_s
  • atomiskt stöd i <stdatomic.h>
  • trådstöd i <threads.h>

UCRT implementerar också en stor delmängd av POSIX.1(ISO/IEC 9945-1:1996, POSIX System Application Program Interface) C-biblioteket. Det är dock inte helt förenligt med någon specifik POSIX-standard. UCRT implementerar också flera Microsoft-specifika funktioner och makron som inte ingår i en standard.

Funktioner som är specifika för Microsoft-implementeringen av Visual C++ finns i vcruntime-biblioteket. Många av dessa funktioner är för intern användning och kan inte anropas av användarkod. Vissa är dokumenterade för användning vid felsökning och implementeringskompatibilitet.

C++-standarden reserverar namn som börjar med ett understreck i det globala namnområdet för implementationen. Både POSIX-funktionerna och Microsoft-specifika körningsbiblioteksfunktioner finns i det globala namnområdet, men ingår inte i standardbiblioteket för C-körning. Det är därför de föredragna Microsoft-implementeringarna av dessa funktioner har ett inledande understreck. För portabilitet stöder UCRT även standardnamnen, men Microsoft C++-kompilatorn utfärdar en utfasningsvarning när kod som använder dem kompileras. Endast standardnamnen är inaktuella, inte själva funktionerna. Om du vill ignorera varningen definierar du _CRT_NONSTDC_NO_WARNINGS innan du inkluderar rubriker i kod som använder de ursprungliga POSIX-namnen. Eftersom C-standarden inte tillåter icke-standardnamn i huvudfiler, så exponerar som standard /std:c11/std:c17 inte standardnamnen för POSIX-funktioner, typer och makron. Om dessa namn är nödvändiga definierar du _CRT_DECLARE_NONSTDC_NAMES för att exponera dem.

Vissa funktioner i C-standardbiblioteket har en historik över osäker användning på grund av missbrukade parametrar och okontrollerade buffertar. Dessa funktioner är ofta källan till säkerhetsproblem i kod. Microsoft skapade en uppsättning säkrare versioner av dessa funktioner som verifierar parameteranvändningen. Anropar en ogiltig parameterhanterare när ett problem upptäcks under körning. Som standard utfärdar Microsoft C++-kompilatorn en utfasningsvarning när en funktion används som har en säkrare variant tillgänglig. När du kompilerar koden som C++, kan du definiera _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES som 1 för att eliminera de flesta varningar. Det här makrot gör det möjligt för mallöverlagringar att anropa de säkrare varianterna samtidigt som portabel källkod bibehålls. Om du vill förhindra varningen definierar du _CRT_SECURE_NO_WARNINGS innan du inkluderar rubriker i kod som använder dessa funktioner. Mer information finns i Säkerhetsfunktioner i CRT.

Med undantag för vad som anges i dokumentationen för specifika funktioner är UCRT kompatibelt med Windows-API:et. Vissa funktioner stöds inte i Windows Store- eller UWP-appar (Universal Windows Platform). Dessa funktioner visas i CRT-funktioner som inte stöds i universella Windows Platform-appar.

Titel Beskrivning
UWP-appar, Windows Runtime och C-runtime Beskriver när UCRT-rutiner inte är kompatibla med Universella Windows-appar eller Microsoft Store-appar.
ANSI C-överensstämmelse Beskriver standardkonforma namn i UCRT.
UNIX Innehåller riktlinjer för portning av program till UNIX.
Windows-plattformar (CRT) Visar de operativsystem som CRT stöder.
bakåtkompatibilitet Beskriver hur du mappar gamla CRT-namn till de nya.
.lib Ger en översikt över CRT-biblioteksfilerna (.lib) och de associerade kompilatoralternativen.