-std=c90 -pedantic-errors and <stdint.h>

Vincent Lefevre vincent+gcc@vinc17.org
Thu Jun 1 12:23:00 GMT 2017

On 2017-06-01 13:42:10 +0200, Toebs Douglass wrote:
> So, I may be completely wrong, but I can see basically two cases where
> this header file name conflict occurs;
> 1. by accident

In this case, a warning/error is expected.

> 2. intentionally (perhaps emulating the later standard header files, to
> make moving up to a later version easier)

In this case, there should be a way to disable the corresponding check.

But note that for (2), I would first expect that programs are written
to support both C90 and a later standard, in which case a conflict
should not occur. One could write something like:

#if ...
#include <stdint.h>
#include "our-stdint.h"

This is more or less what MPFR does with its mpfr-intmax.h, but the
#else case is never tested because <stdint.h> is always detected as
being available, even with -std=c90 -pedantic-errors.

> I expect there is nothing anywhere which states using header names which
> will be part of a *later* standard is *wrong*, in which case this cannot
> be an error.

Just like there is nothing anywhere which states using string lengths
over the C90 implementation limit (which is ridiculously low) is
wrong. But such strings are rejected by -std=c90 -pedantic-errors
as expected.

> I can also see a use case where this behaviour is *normal* and is
> helpful to the user.
> However, I can certainly imagine users wanting to be informed of the
> situation if they did *not* intend it - they did not intend to use a
> name which conflicts with later versions of the standard - and if the
> user is compiling with pedantic, it feels like he is specifically asking
> to be informed of such things.
> Can we perhaps say that there should normally be no warning or error,
> since we can see there *is* a normal use case where this behaviour is
> intended as is useful, but that in pedantic mode, there is at least a
> warning here, since we are specifying an earlier version of C, but using
> a header file name which will conflict with a later version of C.

Yes, this is exactly what I suggested.

Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)

More information about the Gcc-help mailing list