Compatibilidad

La biblioteca en tiempo de ejecución de C Universal (UCRT) es compatible con la mayor parte de la biblioteca estándar de C requerida para la conformidad con C++. Implementa la biblioteca C99 (ISO/IEC 9899:1999), con algunas excepciones:

  • compatibilidad de tipos estricta en <complex.h>.
  • aligned_alloc, que probablemente no se implementará porque el sistema operativo Windows no admite las asignaciones alineadas. Use, en su lugar, el que no es estándar _aligned_malloc.
  • strerrorlen_s
  • compatibilidad atómica en <stdatomic.h>
  • compatibilidad con los subprocesos en <threads.h>

La UCRT también implementa un gran subconjunto de la biblioteca de C POSIX.1 (ISO/IEC 9945-1:1996, la interfaz de programa de aplicación del sistema POSIX). Sin embargo, no es totalmente conforme con ningún estándar específico de POSIX. Además, UCRT implementa varias macros y funciones específicas de Microsoft que no forman parte de un estándar.

Las funciones concretas de la implementación de Microsoft de Visual C++ se encuentran en la biblioteca vcruntime. Muchas de estas funciones son de uso interno y no es posible llamarlas mediante el código de usuario. Algunas están documentadas para su uso en la depuración y la compatibilidad de implementación.

El estándar de C++ reserva los nombres que comienzan con un carácter de subrayado en el espacio de nombres global para la implementación. Tanto las funciones POSIX como las funciones de la biblioteca en tiempo de ejecución específicas de Microsoft están en el espacio de nombres global, pero no forman parte de la biblioteca en tiempo de ejecución de C estándar. Es por eso que las implementaciones preferidas de Microsoft de estas funciones tienen un carácter de subrayado inicial. Para la portabilidad, la UCRT también admite los nombres predeterminados, pero el compilador de Microsoft C++ emite una advertencia de desuso cuando se compila código que los usa. Solo los nombres predeterminados están en desuso, no las funciones en sí. Para suprimir la advertencia, defina _CRT_NONSTDC_NO_WARNINGS antes de incluir encabezados en el código que utiliza los nombres POSIX originales. Dado que el estándar de C no permite nombres no estándar en los archivos de encabezado, de manera predeterminada /std:c11 y /std:c17 no exponen los nombres predeterminados para las funciones, los tipos y las macros POSIX. Si estos nombres son necesarios, defina _CRT_DECLARE_NONSTDC_NAMES para exponerlos.

Algunas funciones de la biblioteca de C estándar tienen un historial de uso no seguro, debido a mal uso de parámetros y búferes sin comprobar. Estas funciones son a menudo el origen de los problemas de seguridad en el código. Microsoft creó un conjunto de versiones más seguras de estas funciones que verifican el uso de los parámetros. Invocan al controlador de parámetros no válido cuando se detecta una incidencia en tiempo de ejecución. De forma predeterminada, el compilador de Microsoft C++ emite una advertencia de desuso cuando se utiliza una función que tiene una variante más segura disponible. Al compilar el código como C++, puede definir _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES en 1 para eliminar la mayoría de las advertencias. Esta macro permite que las sobrecargas de plantilla llamen a las variantes más seguras a la vez que se mantiene el código fuente portable. Para suprimir la advertencia, defina _CRT_SECURE_NO_WARNINGS antes de incluir encabezados en el código que utiliza estas funciones. Para obtener más información, consulte Características de seguridad en CRT.

A menos que se indique lo contrario en la documentación de funciones concretas, la UCRT es compatible con la API de Windows. Algunas funciones no son compatibles con las aplicaciones de la Tienda Windows o de la Plataforma Universal de Windows (UWP). Estas funciones se muestran en las funciones de CRT no admitidas en las aplicaciones de la Plataforma universal de Windows.

Title Descripción
Aplicaciones para UWP, Windows Runtime y el entorno de ejecución de C Describe cuándo las rutinas UCRT no son compatibles con las aplicaciones universales de Windows o de Microsoft Store.
Conformidad con ANSI C Describe los nombres de conformidad al estándar en UCRT.
UNIX Proporciona directrices para trasladar programas a UNIX.
Plataformas Windows (CRT) Enumera los sistemas operativos que admite CRT.
Compatibilidad con versiones anteriores Describe cómo asignar nombres de CRT antiguos a los nombres nuevos.
Archivos .lib de tiempo de ejecución de C (CRT) y biblioteca estándar de C++ (STL) Proporciona información general sobre los archivos de biblioteca (.lib) de CRT y las opciones del compilador asociadas.