[PATCH] define M_PI etc. if _XOPEN_SOURCE is defined appropriately
Jon TURNEY
jon.turney@dronecode.org.uk
Wed Jul 30 13:55:00 GMT 2014
math.h only defines M_PI and similar constants if __STRICT_ANSI__ is not
defined.
SUSv2 specifies that math.h should define some of these constants [1].
Attached is a patch to also define these constants if _XOPEN_SOURCE is
defined appropriately.
$ cat m_pi_test.c
#include <math.h>
int main()
{
double d = M_PI;
}
before patch:
$ gcc m_pi_test.c
$ gcc -std=c99 m_pi_test.c
m_pi_test.c: In function âmainâ:
m_pi_test.c:5:14: error: âM_PIâ undeclared (first use in this function)
$ gcc -std=c99 m_pi_test.c -D_XOPEN_SOURCE=500
m_pi_test.c: In function âmainâ:
m_pi_test.c:5:14: error: âM_PIâ undeclared (first use in this function)
after patch:
$ gcc m_pi_test.c
$ gcc -std=c99 m_pi_test.c
m_pi_test.c: In function âmainâ:
m_pi_test.c:5:14: error: âM_PIâ undeclared (first use in this function)
$ gcc -std=c99 m_pi_test.c -D_XOPEN_SOURCE=500
2014-07-30 Jon TURNEY <jon.turney@dronecode.org.uk>
* libc/include/math.h: Also define M_PI etc. if _XOPEN_SOURCE is
defined appropriately.
[1] http://pubs.opengroup.org/onlinepubs/007908799/xsh/math.h.html
-------------- next part --------------
Index: libc/include/math.h
===================================================================
RCS file: /cvs/src/src/newlib/libc/include/math.h,v
retrieving revision 1.50
diff -u -u -r1.50 math.h
--- libc/include/math.h 18 Dec 2012 22:41:53 -0000 1.50
+++ libc/include/math.h 30 Jul 2014 13:45:52 -0000
@@ -542,8 +542,12 @@
#define TLOSS 5
#define PLOSS 6
+#endif /* ! defined (__STRICT_ANSI__) */
+
/* Useful constants. */
+#if !defined(__STRICT_ANSI__) || (_XOPEN_SOURCE >= 500)
+
#define MAXFLOAT 3.40282347e+38F
#define M_E 2.7182818284590452354
@@ -552,16 +556,21 @@
#define M_LN2 _M_LN2
#define M_LN10 2.30258509299404568402
#define M_PI 3.14159265358979323846
-#define M_TWOPI (M_PI * 2.0)
#define M_PI_2 1.57079632679489661923
#define M_PI_4 0.78539816339744830962
-#define M_3PI_4 2.3561944901923448370E0
-#define M_SQRTPI 1.77245385090551602792981
#define M_1_PI 0.31830988618379067154
#define M_2_PI 0.63661977236758134308
#define M_2_SQRTPI 1.12837916709551257390
#define M_SQRT2 1.41421356237309504880
#define M_SQRT1_2 0.70710678118654752440
+
+#endif
+
+#ifndef __STRICT_ANSI__
+
+#define M_TWOPI (M_PI * 2.0)
+#define M_3PI_4 2.3561944901923448370E0
+#define M_SQRTPI 1.77245385090551602792981
#define M_LN2LO 1.9082149292705877000E-10
#define M_LN2HI 6.9314718036912381649E-1
#define M_SQRT3 1.73205080756887719000
More information about the Newlib
mailing list