::gets has not been declared
Marc Glisse
marc.glisse@inria.fr
Thu Jan 5 16:33:00 GMT 2012
On Thu, 5 Jan 2012, Joseph S. Myers wrote:
> On Thu, 5 Jan 2012, Tom de Vries wrote:
>
>> My hunch is that this recent glibc change causes/triggers the error:
>> ...
>> [BZ #13528]
>> * libio/stdio.h: Do not declare gets for ISO C11 and _GNU_SOURCE.
>> ...
>>
>> I see this both on ARM and MIPS.
>>
>> Should I file this as a problem in gcc or glibc?
>
> It's a bug in libstdc++ that it doesn't allow for headers that have
> removed gets in accordance with C11.
And it is a bug for glibc to remove gets even when __cplusplus is defined.
Also, it used to be that _GNU_SOURCE meant "declare everything and more",
so it is surprising to now have it remove declarations, although it is
understandable.
Do you have any suggestion on what libstdc++ can do when faced with C
libraries that will randomly declare gets or not depending on flags? It
would need knowledge of these exact flags so it can provide a replacement
exactly when it isn't declared (or at least remove the using ::gets in
that case, even if that is non-standard). The easiest workaround I can
think of is to implement a failsafe version of using in the front-end, but
there might be better solutions.
> If the final C++11 still requires gets in <cstdio>, despite it being
> removed in C11, that's probably also a bug in C++11. (At least the most
> recent draft I have to hand still has gets in <cstdio>.)
It still has it. And it is based more on C99 than C11 (which didn't exist
at the time), even if they did try to synchronize on some features.
--
Marc Glisse
More information about the Gcc
mailing list