http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46155

--- Comment #8 from joseph at codesourcery dot com <joseph at codesourcery dot 
com> 2010-10-24 15:21:44 UTC ---
On Sun, 24 Oct 2010, david.kirkby at onetel dot net wrote:

> I don't have a copy of the C standard. Is there one publicly available? In 
> your
> opinion, are IBM wrong to define fprnd_t in /usr/include/float.h? AIX 5.3 is a
> POSIX certified operating system.

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf

(the standard as consolidated with subsequent TCs)

POSIX reserves *_t.  ISO C does not.  An ISO C program may do:

#define fprnd_t something random
#include <float.h>

(A POSIX program would need to define a feature test macro such as 
_POSIX_C_SOURCE, at which point fprnd_t becomes reserved, although the 
function names you listed still aren't reserved.)

> > I haven't seen documentation for those functions and types, but they sound 
> > rather like they should be obsoleted by the standard <fenv.h> facilities 
> > such as fegetround and fesetround.
> 
> According to 
> 
> http://www.gnu.org/software/gnulib/manual/html_node/fesetround.html
> 
> fegetround() is not very portable, so I doubt the GSL developers would want to
> use that. I've found GSL to be very portable. It seems to build on just about
> anything - except AIX, unless one makes a few changes to a source file. 

All the systems listed there are old systems.  ISO C99 was published on 1 
December 1999 - nearly 11 years ago.

It appears that GSL has code that uses the C99 interfaces (fp-gnuc99.c).  
I'd advise using that in preference to all the other pre-C99 OS-specific 
interfaces, whenever the C99 interfaces are available, rather than as the 
very last alternative.  If AIX supports the C99 interfaces, that solves 
your problem.

Reply via email to