Paul,
On 2005 Feb 11 , at 18.23, Paul Eggert wrote:
[...]Norman Gray <[EMAIL PROTECTED]> writes:
Having __STDC__ equal to 0 violates the standard, thus this test is giving the wrong result. I've no idea what these `useful extensions' are, and if I did, I'd certainly be sure to avoid them,
Some of these "useful extensions" are <stdio.h> functions like fileno, which are required by POSIX.
However, as a practical matter, I've found that it's more hassle to disable functions like fileno than it is to enable them.
That's wise.
Myself, I like --std-with-bondage-and-discipline flags, as they keep me honest. I feel they're more useful with C++ than with C, because there are more ways to stuff up with C++; and the fact that this is so I feel is one of the arguments against C++ as a generally useful language.
It might be worth a footnote in the AC_PROG_CC documentation, though, saying that `ANSI C' actually means `ANSI/ISO C without the surprising bits', and...
That being said, it might be reasonable to define a new Autoconf macro AC_PROG_CC_STDC_PEDANTIC, or something like that, which tests for 100% conformance to the C Standard in matters like this.
...gets you `ISO C, and we really mean it'.
The following patch to autoconf 2.59's lib/autoconf/c.m4 might be a start.
497a498,507 > # AC_PROG_CC_STRICT([COMPILER...]) > # -------------------------------- > # As with AC_PROG_CC, except that the compiler is checked for strict > # compliance with the ISO C standard. > m4_define([AC_PROG_CC_STRICT], > [m4_define([_AC_PROG_CC_STRICT_FLAG], [yes]) > AC_PROG_CC($1) > m4_undefine([_AC_PROG_CC_STRICT_FLAG]) > ])# AC_PROG_CC_STRICT > 794a805,807 > # > # If the macro _AC_PROG_CC_STRICT_FLAG is set to "yes", then check > # for strict compliance with the ISO C standard. 804a818,824 > ]m4_if(_AC_PROG_CC_STRICT_FLAG, [yes], [dnl > > /* Check that the __STDC__ flag is defined to 1, not 0 */ > #if !__STDC__ > choke me > #endif > ])[
...but only a start. The `strict' test in there is pretty primitive, and doesn't, for example, end up requiring gcc's -ansi or -pedantic flags. I'll leave for a separate discussion precisely what tests would be appropriate there, and which of those flags would be useful. Pace my remarks above, aiming for -ansi or equivalent would probably satisfy _me_ at least, since that ends up with the compiler behaving exactly as ISO-9899 or ISO-14882 says it should.
[And just by the way, an -iso flag would probably be less parochial than -ansi, unless we can have a -bsi, a -din, ... as well (hrumph). But that really is a separate issue!]
All the best,
Norman
-- ---------------------------------------------------------------------- Norman Gray : Physics & Astronomy, Glasgow University, UK http://www.astro.gla.ac.uk/users/norman/ : www.starlink.ac.uk