bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: stdbool module unconditionally #define true


From: Simon Josefsson
Subject: Re: stdbool module unconditionally #define true
Date: Fri, 14 Oct 2022 23:08:48 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux)

Bruno Haible <bruno@clisp.org> writes:

> Simon Josefsson wrote:
>> rlogind.c: In function 'rlogind_mainloop':
>> rlogind.c:1112:7: error: expected identifier or '(' before numeric constant
>>  1112 |   int true;
>>       |       ^~~~
>> 
>> The file does not include stdbool.h.  ...
>> 
>> Does C23 disallow this?
>
> Yes. C23 ยง 6.4.1 states that true and false are now keywords. This precludes
> the use as variable names.

Thanks for analysis and the pointer!  How can I trigger that without
gnulib's config.h?  Shouldn't the following cause a compilation error?

$ podman run -it gcc:latest
root@18544d251872:/# cat>foo.c
int main (void) {
int true = 42;
return true;
}
^D
root@18544d251872:/# gcc --version
gcc (GCC) 12.2.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

root@18544d251872:/# gcc -std=gnu2x -o foo foo.c -Wall -Wpedantic -Wextra
root@18544d251872:/# 

> So, that source code will need to change to conform to C23.
>
> With Gnulib, you can opt to avoid the 'stdbool' module and use 'stdbool-c99'.
> This will avoid this compilation error in rlogind.c, but many Gnulib modules
> will not compile in this setting.

I changed the variable names here instead.

/Simon

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]