Re: Feature Conditional for M_PI

Corinna Vinschen via Newlib <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
On Aug 31 10:50, Joel Sherrill wrote:
> On Mon, Aug 31, 2020 at 10:30 AM Corinna Vinschen via Newlib <
> [email protected]> wrote:
> 
> > On Aug 31 17:27, Corinna Vinschen via Newlib wrote:
> > > On Aug 31 10:10, Joel Sherrill wrote:
> > > > Hi
> > > >
> > > > I was porting some code from Linux to Cygwin and came across this.
> > M_PI in
> > > > math.h is defined by POSIX as part of XSI. It does not appear to be
> > part of
> > > > C99 or C++03.  I have this cut down to show the problem:
> > > >
> > > > ==========================
> > > > #include <math.h>
> > > >
> > > > double pi = M_PI;
> > > > ==========================
> > > >
> > > > And this script to try various feature defines and compilers:
> > > >
> > > > ===========================
> > > > GCC=${GCC:-g++}
> > > >
> > > > ${GCC} -c m.c
> > > > ${GCC} -D_XOPEN_SOURCE=700 -c m.c
> > > > ${GCC} -D_POSIX_C_SOURCE=200809L -c m.c
> > > > ${GCC} -D_XOPEN_SOURCE=700 -c -D_POSIX_C_SOURCE=200809L -c m.c
> > > > ===========================
> > > >
> > > > All of those compiler invocations work on Linux but the third one does
> > not
> > > > work on Cygwin or RTEMS which use newlib.
> > > >
> > > > Is the proper thing to do to add  -D_XOPEN_SOURCE=700 when compiling
> > this
> > > > program?
> > > >
> > > > Just curious if Linux is defining _XOPEN_SOURCE by default and newlib
> > > > doesn't.

Actually, Yaakov pointed out on IRC that this is a C++ problem on Linux.
You're running the above test with g++.  If you perform the third test
with gcc on Linux:

  gcc -D_POSIX_C_SOURCE=200809L -c m.c

you'll get the same error as on newlib and FreeBSD:

m.c: In function ‘main’:
m.c:8:15: error: ‘M_PI’ undeclared (first use in this function)
    8 |   double pi = M_PI;
          |               ^~~~
	  m.c:8:15: note: each undeclared identifier is reported only once for each function it appears in

The problem in glibc and/or g++ is that this does *not* occur when
building with g++.


Corinna
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.