Совместимость

Универсальная библиотека среды выполнения C (UCRT) поддерживает большую часть стандартной библиотеки C, необходимой для соответствия C++. Она реализует библиотеку C99 (ISO/IEC 9899:1999) с определенными исключениями:

  • строгая совместимость типов в <complex.h>.
  • aligned_alloc, который, вероятно, не будет реализован, так как операционная система Windows не поддерживает выровненные выделения. Вместо этого используйте нестандартную _aligned_malloc.
  • strerrorlen_s
  • атомная поддержка в <stdatomic.h>
  • Поддержка потоков в <threads.h>

UCRT также реализует большое подмножество POSIX.1 (ISO/IEC 9945-1:1996, интерфейс ПРОГРАММЫ POSIX) C. Однако это не полностью соответствует любому конкретному стандарту POSIX. UCRT также реализует несколько функций и макросов майкрософт, которые не являются частью стандарта.

Функции, относящиеся к реализации Майкрософт Visual C++, находятся в библиотеке vcruntime. Многие из этих функций предназначены для внутреннего использования и не могут вызываться пользовательским кодом. Некоторые предназначены для использования при отладке и проверке совместимости реализаций.

Стандартная библиотека C++ резервирует имена, которые начинаются с символа подчеркивания в глобальном пространстве имен, в реализации. Функции POSIX и функции библиотеки среды выполнения майкрософт находятся в глобальном пространстве имен, но не являются частью стандартной библиотеки среды выполнения C. Поэтому предпочтительные реализации этих функций Майкрософт имеют основное подчеркивание. Для переносимости библиотека UCRT также поддерживает имена по умолчанию, но компилятор Microsoft C++ выдает предупреждение об устаревании при компиляции кода, который использует их. Не рекомендуется использовать только имена по умолчанию, а не сами функции. Чтобы подавить предупреждение, задайте _CRT_NONSTDC_NO_WARNINGS перед включением каких-либо заголовков в код, использующий исходные имена POSIX. Так как стандарт C не разрешает нестандартные имена в файлах заголовков, по умолчанию и /std:c17 не предоставляют имена по умолчанию /std:c11 для функций POSIX, типов и макросов. Если эти имена необходимы, определите _CRT_DECLARE_NONSTDC_NAMES их для их предоставления.

Про некоторые функции в стандартной библиотеке C известно, что имеется тенденция к их небезопасному использованию из-за неправильно используемых параметров и непроверенных буферов. Эти функции часто являются источником проблем с безопасностью в коде. Корпорация Майкрософт создала набор более безопасных версий этих функций, которые проверяют использование параметров. Они вызывают обработчик недопустимых параметров при обнаружении проблемы во время выполнения. По умолчанию компилятор Microsoft C++ выдает предупреждение об устаревании, когда используется функция, для которой имеется более безопасный вариант. При компиляции кода как C++можно определить _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES как 1, чтобы исключить большинство предупреждений. Этот макрос позволяет перегрузкам шаблонов вызывать более безопасные варианты при сохранении переносимого исходного кода. Чтобы подавить предупреждение, определите _CRT_SECURE_NO_WARNINGS перед тем, как включить какие-либо заголовки в код, который использует эти функции. Дополнительные сведения см. в разделе "Функции безопасности" в CRT.

За исключением указанного в документации по конкретным функциям библиотека UCRT совместима с Windows API. Некоторые функции не поддерживаются в Магазинах Windows или приложениях универсальная платформа Windows (UWP). Эти функции перечислены в функциях CRT, которые не поддерживаются в универсальная платформа Windows приложениях.

Обращение Description
Приложения UWP, среда выполнения Windows и среда выполнения C Описывает, когда подпрограммы UCRT несовместимы с универсальными приложениями Windows или приложениями Microsoft Store.
Соответствие ANSI C Описывает стандартные имена в UCRT.
UNIX Рекомендации по переносу программ в UNIX.
Платформы Windows (CRT) Выводит список операционных систем, поддерживаемых CRT.
Обратная совместимость Описание сопоставлений старых имен CRT с новыми.
Файлы среды выполнения C (CRT) и стандартной библиотеки C++ (STL) .lib Общие сведения о файлах библиотеки CRT (LIB) и соответствующих параметрах компилятора.