This is the mail archive of the mailing list for the newlib project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: stdio.h patches for g++ -std=c++11

Hi Corinna

I made an error by following the website I referenced in my previous mail. It was stating that snprintf was "c++11 only". So I bougth the official norm of C++ namely -- ISO/IEC 14882-2011-- from the ANSI eShop and below are the specifications of the <cstdio> header. So I reworked the patch which integrates now in the first block the proper additional declarations for

int _EXFUN(snprintf, (char *__restrict, size_t, const char *__restrict, ...)
               _ATTRIBUTE ((__format__ (__printf__, 3, 4))));
int    _EXFUN(vscanf, (const char *, __VALIST)
               _ATTRIBUTE ((__format__ (__scanf__, 1, 0))));
int _EXFUN(vsnprintf, (char *__restrict, size_t, const char *__restrict, __VALIST)
               _ATTRIBUTE ((__format__ (__printf__, 3, 0))));
int _EXFUN(vsscanf, (const char *__restrict, const char *__restrict, __VALIST)
               _ATTRIBUTE ((__format__ (__scanf__, 2, 0))));
int    _EXFUN(vfscanf, (FILE *__restrict, const char *__restrict, __VALIST)
               _ATTRIBUTE ((__format__ (__scanf__, 2, 0))));

Please notice that vfscanf is not part of the ISO/IEC 14882-2011 norm but I think it is a mistake. So I put it with the others added declarations.

My apologizes for the noise and overhead of work.


ISO/IEC 14882-2011 chapter 27.9.2
27.9.2 C library files [c.files]
EOF L_tmpnam SEEK_END _IOFBF stderr

Types: FILE fpos_t size_t <cstdio>

clearerr fopen fsetpos putc setbuf vprintf
fclose fprintf ftell putchar setvbuf vscanf
feof fputc fwrite puts snprintf vsnprintf
ferror fputs getc rename sprintf vsprintf
fflush fread getchar remove tmpfile vsscanf
fgetc freopen gets rewind tmpnam
fgetpos fscanf perror scanf ungetc
fgets fseek printf sscanf vfprintf

Le 09/05/2014 16:14, Corinna Vinschen a Ãcrit :
On May  9 12:01, zosrothko wrote:
Le 09/05/2014 10:43, Corinna Vinschen a Ãcrit :
On May  9 07:52, zosrothko wrote:
Hi Corinna

I made a typo in my previous patch. Here the corrected one.
Thanks.  Your patches are missing a matching ChangeLog entry, btw.

However, on second thought I'm not sure that removing the 'i' variations
of the functions from "__cplusplus >= 201103L" in this way is such a
good idea.

The 'i' functions are a newlib extension for embedded targets.

They are not part of any standard, so they are certainly neither part
of "__cplusplus >= 201103L", nor part of "__STDC_VERSION__ >= 199901L".

So, either we remove these functions from both standards, or we include
them in both standards.

But if we remove them from both standards when will they be defined at
all?  This should be cleared up before making this change.

Is defining them with only

   #if !defined(__STRICT_ANSI__)

That won't work because of this

$ g++ -xc++ -std=c++11 -dM -E - < /dev/null | sort | grep ANSI
#define __STRICT_ANSI__ 1

$ g++ -xc++ -std=gnu++11 -dM -E - < /dev/null | sort | grep ANSI
Are you sure?  Your example seems to indicate that

   #if !defined(__STRICT_ANSI__)

is ok for the 'i' functions.


Attachment: stdio.h.2.patch
Description: Text document

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]