Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La /Zc:cmath opción del compilador reemplaza la implementación en tiempo de ejecución de las funciones matemáticas en el <math.h> encabezado del entorno de ejecución de C y <cmath> el encabezado de biblioteca estándar de C++ por libc de LLVM. Esta implementación proporciona resultados redondeados correctamente en todos los modos de redondeo.
Necesita esta opción para la evaluación en tiempo de compilación de las funciones matemáticas de la biblioteca estándar de C++ que se convierten constexpr en C++23 o posterior.
Esta opción es experimental.
Syntax
/Zc:cmath
Remarks
Necesita la /Zc:cmath opción , junto con /std:c++23, para la evaluación en tiempo de compilación de las funciones matemáticas que se convierten constexpr en C++23 por propuesta P0533R9: constexpr para <cmath> y <cstdlib>el problema 3834 de LWG: Falta constexpr para std::intmax_t las funciones matemáticas en <cinttypes>.
La /Zc:cmath opción está disponible a partir de la versión 14.52 de MSVC Build Tools. Está desactivado de forma predeterminada.
Habilitar esta opción puede afectar al rendimiento y la precisión de las funciones matemáticas declaradas en <math.h> y <cmath>.
Cuando se usa /Zc:cmath, el conjunto de herramientas de C++ se vincula automáticamente con libvcmath-mt.lib o libvcmath-md.lib cuando se llama a funciones matemáticas desde un encabezado de biblioteca estándar. Estas bibliotecas están vinculadas estáticamente al binario resultante.
Note
Las directivas de inclusión del sistema usan corchetes angulares, por lo que #include <math.h> se reconoce pero #include "math.h" no.
Esta opción reemplaza las directivas include del sistema que incluyen y <stdlib.h> con directivas que incluyen <math.h> encabezados de reemplazo de biblioteca estándar. La opción afecta a <cmath> y <cstdlib> porque incluyen <math.h> y <stdlib.h>. Los encabezados de reemplazo difieren de sus encabezados UCRT correspondientes de las maneras siguientes:
Las definiciones de función matemática son
noexcept, que entra en conflicto con las declaraciones que nonoexceptson . Consulte C2382. Las posibles correcciones son quitar declaraciones de reenvío innecesarias o agregarnoexcepta declaraciones de reenvío.No se proporcionan funciones ni definiciones de macros que no forman parte del estándar de C++. Esta exclusión incluye las constantes matemáticas, como
M_PI. El<numbers>encabezado de biblioteca estándar proporciona definiciones conformes de las variables correspondientes. Para seguir usando estas constantes matemáticas, incluya<corecrt_math_defines.h>directamente ._USE_MATH_DEFINESno tiene ningún efecto cuando se usa/Zc:cmath.
Background
De forma predeterminada, el runtime de C universal (UCRT) implementa las funciones matemáticas declaradas en <math.h> y <cmath>. Windows mantiene e implementa UCRT, por lo que los resultados de la función matemática pueden variar según Windows versión.
Al habilitar /Zc:cmath, libc de LLVM implementa estas funciones matemáticas en bibliotecas vinculadas estáticamente denominadas libvcmath-mt.lib y libvcmath-md.lib. Las herramientas de compilación de C++ implementan estas bibliotecas, no el sistema operativo Windows. Dado que estas funciones devuelven resultados redondeados correctamente, sus resultados son estables en las versiones del sistema operativo y las arquitecturas de hardware.
Para establecer esta opción del compilador en Visual Studio
- Abra el cuadro de diálogo Páginas de propiedades del proyecto. Para más información, vea Establecimiento del compilador de C++ y de propiedades de compilación en Visual Studio.
- Seleccione la página de propiedades Propiedades de configuración>C/C++>Línea de comandos.
- Agregue
/Zc:cmathal panel Opciones adicionales: .
Véase también
/Zc (Conformidad)
/std (Especificar la versión estándar del lenguaje)
Constantes matemáticas