Compatibilité

La bibliothèque ucRT (Universal C Runtime Library) prend en charge la plupart des bibliothèques standard C requises pour la conformité C++. Il implémente la bibliothèque C99 (ISO/IEC 9899 :1999), avec certaines exceptions :

  • compatibilité de type strict dans <complex.h>.
  • aligned_alloc, qui ne sera probablement pas implémenté, car le système d’exploitation Windows ne prend pas en charge les allocations alignées. Utilisez plutôt le non standard _aligned_malloc.
  • strerrorlen_s
  • prise en charge atomique dans <stdatomic.h>
  • Prise en charge du threading dans <threads.h>

L’UCRT implémente également un grand sous-ensemble de la bibliothèque C POSIX.1 (ISO/IEC 9945-1 :1996, l’interface du programme d’application système POSIX). Toutefois, elle n’est pas entièrement conforme à une norme POSIX spécifique. L’UCRT implémente également plusieurs fonctions et macros spécifiques à Microsoft qui ne font pas partie d’une norme.

Les fonctions spécifiques à l’implémentation Microsoft de Visual C++ se trouvent dans la bibliothèque vcruntime. La plupart de ces fonctions sont destinées à une utilisation interne et ne peuvent pas être appelées par le code utilisateur. La documentation décrit certaines fonctions destinées au débogage et à l’implémentation de la compatibilité.

La norme C++ réserve à l’implémentation des noms qui commencent par un trait de soulignement dans l’espace de noms global. Les fonctions POSIX et les fonctions de bibliothèque runtime spécifiques à Microsoft se trouvent dans l’espace de noms global, mais ne font pas partie de la bibliothèque runtime C standard. C’est pourquoi les implémentations Microsoft préférées de ces fonctions ont un trait de soulignement principal. Pour des raisons de portabilité, la bibliothèque UCRT prend également en charge les noms par défaut. Toutefois, le compilateur Microsoft C++ émet un avertissement de dépréciation quand du code qui les utilise est compilé. Seuls les noms par défaut sont déconseillés, et non les fonctions elles-mêmes. Pour supprimer l’avertissement, définissez _CRT_NONSTDC_NO_WARNINGS avant d’inclure des en-têtes dans le code qui utilise les noms POSIX d’origine. Étant donné que la norme C n’autorise pas les noms non standard dans les fichiers d’en-tête, par défaut /std:c11 et /std:c17 n’expose pas les noms par défaut pour les fonctions, types et macros POSIX. Si ces noms sont nécessaires, définissez-les _CRT_DECLARE_NONSTDC_NAMES pour les exposer.

Certaines fonctions de la bibliothèque C standard ont un historique d’utilisation non sécurisée, en raison de paramètres mal utilisés et de mémoires tampons non vérifiées. Ces fonctions sont souvent à l’origine de problèmes de sécurité dans le code. Microsoft a créé un ensemble de versions plus sûres de ces fonctions qui vérifient l’utilisation des paramètres. Ils appellent le gestionnaire de paramètres non valide lorsqu’un problème est détecté au moment de l’exécution. Par défaut, le compilateur Microsoft C++ émet un avertissement de dépréciation quand une variante plus sécurisée d’une fonction est disponible. Lorsque vous compilez votre code en C++, vous pouvez définir _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES comme 1 pour éliminer la plupart des avertissements. Cette macro permet aux surcharges de modèle d’appeler les variantes plus sûres tout en conservant le code source portable. Pour supprimer l’avertissement, définissez _CRT_SECURE_NO_WARNINGS avant d’inclure des en-têtes dans le code qui utilise ces fonctions. Pour plus d’informations, consultez Fonctionnalités de sécurité dans le CRT.

À l’exception de ce qui est indiqué dans la documentation pour des fonctions spécifiques, la bibliothèque UCRT est compatible avec l’API Windows. Certaines fonctions ne sont pas prises en charge dans les applications du Windows Store ou plateforme Windows universelle (UWP). Ces fonctions sont répertoriées dans les fonctions CRT non prises en charge dans les applications plateforme Windows universelle.

Intitulé Description
Applications UWP, Windows Runtime et runtime C Décrit quand les routines UCRT ne sont pas compatibles avec les applications Windows universelles ou les applications du Microsoft Store.
Conformité ANSI C Décrit les noms conformes aux normes dans l’UCRT.
UNIX Fournit des instructions pour le portage de programmes vers UNIX.
Plateformes Windows (CRT) Répertorie les systèmes d’exploitation pris en charge par CRT.
Compatibilité descendante Explique comment mapper les anciens noms CRT aux nouveaux.
Fichiers C runtime (CRT) et bibliothèque standard C++ (STL) .lib Offre une vue d'ensemble des fichiers de bibliothèque CRT (.lib) et les options de compilateur associées.