ejemplos - Usando M_PI con el estándar C89
pow c (4)
No veo cuál es el problema aquí; no hay incompatibilidad entre -std = c89 y _USE_MATH_DEFINES, uno define qué idioma compilará el compilador, el otro define qué partes de math.h se habilitan.
Las partes que están habilitadas no están definidas como parte de la biblioteca estándar ISO C, pero eso no es lo mismo que no ser el lenguaje C estándar, el lenguaje y la biblioteca son entidades separadas en C. No es menos compatible con C89 de lo que sería si ha definido sus propias macros en su propio encabezado.
Sin embargo, le sugiero que defina la macro en la línea de comandos en lugar de en el código:
-std=c89 -D_USE_MATH_DEFINES
Si alguna vez encuentras una implementación de math.h que no define M_PI, entonces eso se soluciona fácilmente sin modificación de código al usar de manera similar macros definidas por línea de comando:
-std=c89 -DM_PI=3.14159265358979323846
Estoy usando C y tratando de obtener acceso a la constante M_PI (3.14159 ...). Importé el archivo de encabezado math.h, pero la constante M_PI aún no estaba definida. A través de algunas búsquedas en StackOverflow, he descubierto que necesito agregar #define _USE_MATH_DEFINES
a mi código (vea el código de ejemplo a continuación). Esto funciona bien cuando compilo normalmente, pero necesito poder compilar con la bandera std=c89
para el trabajo que estoy haciendo.
¿Cómo debo acceder a M_PI desde algún código C89?
Un archivo de biblioteca estándar math.h
no solo no es obligatorio, sino que no debe definir M_PI
de manera predeterminada. En este contexto, ''por defecto'' significa que M_PI
solo debe definirse a través de trucos específicos del compilador, en la mayoría de los casos, comportamiento indefinido mediante el uso de identificadores reservados.
Simplemente defina la constante usted mismo (puede usar el nombre M_PI
libremente, pero si desea poder compilar el código con un compilador no conforme, primero debe verificar que M_PI
no esté definido). Por convención, no defina M_PI
como algo más que (la aproximación de) pi.
Yo iría por
#ifndef M_PI
# define M_PI 3.14159265358979323846
#endif
M_PI
no es requerido por el estándar C, es solo una extensión común, así que si quieres ser estándar no debes confiar en él. Sin embargo, puede definir fácilmente su propio #define
, la última vez que lo revisé fue una constante universal, por lo que no hay mucho espacio para la confusión. :)