Kompatibilita
Knihovna UCRT (Universal C Runtime Library) podporuje většinu standardní knihovny jazyka C vyžadované pro shodu jazyka C++. Implementuje knihovnu C99 (ISO/IEC 9899:1999), s některými výjimkami:
- striktní kompatibilita typů v <complex.h>.
aligned_alloc
, které pravděpodobně nebude implementováno, protože operační systém Windows nepodporuje sladěné přidělení. Místo toho použijte nestandardní_aligned_malloc
.strerrorlen_s
- atomic support in <stdatomic.h>
- podpora podprocesů ve <vláknech.h>
UCRT také implementuje velkou podmnožinu knihovny C POSIX.1 (ISO/IEC 9945-1:1996, rozhraní POSIX System Application Program Interface). Není však plně v souladu s žádným konkrétním standardem POSIX. UCRT také implementuje několik funkcí a maker specifických pro Microsoft, které nejsou součástí standardu.
Funkce specifické pro implementaci jazyka Visual C++ od Microsoftu se nacházejí v knihovně vcruntime. Mnohé z těchto funkcí slouží k internímu použití a nelze je volat uživatelským kódem. Některé jsou zdokumentované pro použití při ladění a kompatibilitě implementace.
Standardní jazyk C++ si vyhrazuje názvy, které začínají podtržítkem v globálním oboru názvů pro implementaci. Funkce POSIX i funkce knihovny modulu runtime specifické pro Microsoft jsou v globálním oboru názvů, ale nejsou součástí standardní knihovny modulu runtime jazyka C. Proto upřednostňované implementace těchto funkcí od Microsoftu mají úvodní podtržítko. Pro přenositelnost podporuje UCRT také výchozí názvy, ale kompilátor Microsoft C++ vydá upozornění na vyřazení při kompilaci kódu, který je používá. Pouze výchozí názvy jsou zastaralé, ne samotné funkce. Pokud chcete upozornění potlačit, definujte _CRT_NONSTDC_NO_WARNINGS
před zahrnutím všech hlaviček v kódu, které používají původní názvy POSIX. Vzhledem k tomu, že standard jazyka C neumožňuje standardní názvy v souborech hlaviček, a /std:c17
ve výchozím nastavení /std:c11
nezpřístupňuje výchozí názvy funkcí, typů a maker POSIX. Pokud jsou tyto názvy nezbytné, definujte _CRT_DECLARE_NONSTDC_NAMES
je, abyste je zpřístupnili.
Některé funkce ve standardní knihovně jazyka C mají historii nebezpečného použití z důvodu zneužití parametrů a nezaškrtnutých vyrovnávacích pamětí. Tyto funkce jsou často zdrojem problémů se zabezpečením v kódu. Společnost Microsoft vytvořila sadu bezpečnějších verzí těchto funkcí, které ověřují použití parametrů. Vyvolá neplatnou obslužnou rutinu parametru při zjištění problému za běhu. Kompilátor Jazyka Microsoft C++ ve výchozím nastavení vydává upozornění na vyřazení, pokud se používá funkce, která má bezpečnější dostupnou variantu. Při kompilaci kódu jako C++ můžete definovat _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES
jako 1, abyste odstranili většinu upozornění. Toto makro umožňuje přetížení šablony volat bezpečnější varianty při zachování přenosného zdrojového kódu. Pokud chcete upozornění potlačit, definujte _CRT_SECURE_NO_WARNINGS
před zahrnutím hlaviček do kódu, který tyto funkce používá. Další informace naleznete v tématu Funkce zabezpečení v CRT.
Kromě toho, jak je uvedeno v dokumentaci pro konkrétní funkce, je UCRT kompatibilní s rozhraním API systému Windows. Některé funkce nejsou podporované ve Windows Storu ani v aplikacích pro Univerzální platforma Windows (UPW). Tyto funkce jsou uvedené v funkcích CRT, které nejsou v aplikacích Univerzální platforma Windows podporované.
Související články
Titulek | Popis |
---|---|
Aplikace pro UPW, prostředí Windows Runtime a modul runtime jazyka C | Popisuje, kdy rutiny UCRT nejsou kompatibilní s univerzálními aplikacemi pro Windows nebo aplikacemi z Microsoft Storu. |
Shoda s ANSI C | Popisuje standardní názvy v UCRT. |
UNIX | Obsahuje pokyny pro přenos programů do systému UNIX. |
Platformy Windows (CRT) | Uvádí operační systémy, které CRT podporuje. |
Zpětná kompatibilita | Popisuje, jak namapovat staré názvy CRT na nové názvy. |
Soubory C runtime (CRT) a standardní knihovny C++ (STL) .lib |
Poskytuje přehled souborů knihovny CRT (.lib) a přidružených možností kompilátoru. |