Hi. Upgrading gnulib in inetutils causes a build failure:
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. Apparently this has worked for
many years and on many platforms. One may question the wisdom to name a
variable 'true' but apparently it seemed to have worked well, and the
code may originate back before stdbool was introduced into C.
Does C23 disallow this?
I see config.h contains the following (I'm using gcc 10):
/* Define to 1 if bool, true and false work as per C2023. */
/* #undef HAVE_C_BOOL */
...
#ifndef HAVE_C_BOOL
# if !defined __cplusplus && !defined __bool_true_false_are_defined
# if HAVE_STDBOOL_H
# include <stdbool.h>
# else
# if defined __SUNPRO_C
# error "<stdbool.h> is not usable with this configuration. To make it
usable, add -D_STDC_C99= to $CC."
# else
# error "<stdbool.h> does not exist on this platform. Use gnulib module
'stdbool-c99' instead of gnulib module 'stdbool'."
# endif
# endif
# endif
# if !true
# define true (!false)
# endif
#endif
This seems surprising to me -- the snippet comes from m4/c-bool.m4 and
always introduce a #define for the CPP symbol 'true', even when the code
did not request any stdbool-related declarations by doing '#include
<stdbool.h>'.
Shouldn't gnulib provide a stdbool.h file that #define true, instead of
putting it into config.h forcing it on all code?
/Simon
signature.asc
Description: PGP signature
