Compatibilità

Universal C Runtime Library (UCRT) supporta la maggior parte della libreria standard C necessaria per la conformità C++. Implementa la libreria C99 (ISO/IEC 9899:1999), con alcune eccezioni:

  • strict type compatibility in <complex.h>.
  • aligned_alloc, che probabilmente non verrà implementato perché il sistema operativo Windows non supporta le allocazioni allineate. Usare invece , non standard _aligned_malloc.
  • strerrorlen_s
  • supporto atomico in <stdatomic.h>
  • supporto del threading in <threads.h>

UCRT implementa anche un sottoinsieme di grandi dimensioni della libreria C POSIX.1 (ISO/IEC 9945-1:1996, POSIX System Application Program Interface). Tuttavia, non è completamente conforme a uno standard POSIX specifico. UCRT implementa anche diverse funzioni e macro specifiche di Microsoft che non fanno parte di uno standard.

Le funzioni specifiche per l'implementazione Microsoft di Visual C++ si trovano nella libreria vcruntime. Molte di queste funzioni sono destinate all'uso interno e non possono essere chiamate dal codice utente. Alcune sono documentate per l'uso durante il debug e per la compatibilità dell'implementazione.

Lo standard C++ riserva all'implementazione i nomi che iniziano con un carattere di sottolineatura nello spazio dei nomi globale. Entrambe le funzioni POSIX e le funzioni della libreria di runtime specifiche di Microsoft si trovano nello spazio dei nomi globale, ma non fanno parte della libreria di runtime C standard. Ecco perché le implementazioni Microsoft preferite di queste funzioni hanno un carattere di sottolineatura iniziale. Per la portabilità, UCRT supporta anche i nomi predefiniti, ma il compilatore Microsoft C++ genera un avviso di deprecazione quando viene compilato il codice che li usa. Solo i nomi predefiniti sono deprecati, non le funzioni stesse. Per eliminare l'avviso, definire _CRT_NONSTDC_NO_WARNINGS prima di includere le intestazioni nel codice che usa i nomi POSIX originali. Poiché lo standard C non consente nomi non standard nei file di intestazione, per impostazione predefinita /std:c11 e /std:c17 non espone i nomi predefiniti per funzioni, tipi e macro POSIX. Se questi nomi sono necessari, definire _CRT_DECLARE_NONSTDC_NAMES per esporli.

Alcune funzioni nella libreria C standard hanno una storia di utilizzi non sicuri a causa di parametri usati in modo improprio e di buffer non controllati. Queste funzioni causano spesso problemi di sicurezza nel codice. Microsoft ha creato un set di versioni più sicure di queste funzioni che verificano l'utilizzo dei parametri. Richiamano il gestore di parametri non validi quando viene rilevato un problema in fase di esecuzione. Per impostazione predefinita, il compilatore Microsoft C++ genera un avviso di deprecazione quando per una funzione in uso è disponibile una variante più sicura. Quando si compila il codice come C++, è possibile definire _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES come 1 per eliminare la maggior parte degli avvisi. Questa macro consente agli overload di modelli di chiamare le varianti più sicure mantenendo il codice sorgente portabile. Per eliminare l'avviso, definire _CRT_SECURE_NO_WARNINGS prima di includere le intestazioni nel codice che usa queste funzioni. Per altre informazioni, vedere Funzionalità di sicurezza in CRT.

Ad eccezione di quanto indicato nella documentazione per funzioni specifiche, UCRT è compatibile con l'API Windows. Alcune funzioni non sono supportate nelle app di Windows Store o piattaforma UWP (Universal Windows Platform) (UWP). Queste funzioni sono elencate nelle funzioni CRT non supportate nelle app piattaforma UWP (Universal Windows Platform).

Posizione Descrizione
App UWP, Windows Runtime e runtime C Descrive quando le routine UCRT non sono compatibili con le app di Windows universali o le app di Microsoft Store.
Conformità ANSI C Descrive i nomi conformi allo standard in UCRT.
UNIX Fornisce indicazioni per trasferire i programmi su UNIX.
Piattaforme Windows (CRT) Elenca i sistemi operativi supportati da CRT.
Compatibilità con le versioni precedenti Descrive come eseguire il mapping dei nomi CRT precedenti ai nuovi.
File C Runtime (CRT) e C++ Standard Library (STL) .lib Fornisce una panoramica sui file della libreria CRT (.lib) e le opzioni del compilatore associate.