::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