On 02/11/2023 00:28, peter0x44 via Gcc wrote:
On 2023-11-01 23:13, Joseph Myers wrote:
On Wed, 1 Nov 2023, peter0x44 via Gcc wrote:
Why is #define used instead of typedef? I can't imagine how this could
possibly break any existing code.
That's how stdbool.h is specified up to C17. In C23, bool is a keyword
instead.
I see, I didn't know it was specified that way. It seems quite strange
that typedef wouldn't be used for this purpose.
I suppose perhaps it matters if you #undef bool and then use it to
define your own type? Still, it seems very strange to do this.
Yes, that is part of the reason. The C standards mandate a number of
things to be macros when it would seem that typedef's, functions,
enumeration constants or other things would be "nicer" in some sense.
Macros have two advantages, however - you can "#undef" them, and you can
use "#ifdef" to test for them. This makes them useful in several cases
in the C standards, especially for changes that could break backwards
compatibility. Someone writing /new/ code would hopefully never make
their own "bool" type, but there's plenty of old code around - if you
ever need to include some pre-C99 headers with their own "bool" type and
post-C99 headers using <stdbool.h>, within the same C file, then it's
entirely possible that you'll be glad "bool" is a macro.
Maybe it's something to offer as a GNU extension? Though, I'm leaning
towards too trivial to be worth it, just for a (very minor) improvement
to a diagnostic that can probably be handled in other ways.
Speaking as someone with absolutely zero authority (I'm a GCC user, not
a GCC developer), I strongly doubt that "bool" will be made a typedef as
a GCC extension.
But if there are problems with the interaction between pre-processor
macros and the formatting of diagnostic messages, then that is
definitely something that you should file as a bug report and which can
hopefully be fixed.
David