__isoc99_scanf and scanf

后端 未结 2 1420
鱼传尺愫
鱼传尺愫 2021-02-19 23:39

I was studying various compiler option in GCC and observing changes when I made changes in the standard to be used.

$ gcc Q1.c -Wall -save-temps -o Q1
$ vi Q1.s
         


        
相关标签:
2条回答
  • 2021-02-20 00:19

    scanf(3) manual mentions several type modifiers characters introduced in c99:

    j      As for h, but the next pointer is a pointer to an intmax_t or a uintmax_t.  This modifier was introduced in C99
    t      As for h, but the next pointer is a pointer to a ptrdiff_t.  This modifier was introduced in C99.
    z      As for h, but the next pointer is a pointer to a size_t.  This modifier was introduced in C99.
    a      (C99) Equivalent to f
    
    0 讨论(0)
  • 2021-02-20 00:23

    The reason is strict following of c99 disallow some existing GNU extension conversion specifiers.

    In glibc 2.17, in libio/stdio.h there is this comment:

    /* For strict ISO C99 or POSIX compliance disallow %as, %aS and %a[
       GNU extension which conflicts with valid %a followed by letter
       s, S or [.  */
    extern int __REDIRECT (fscanf, (FILE *__restrict __stream,
        const char *__restrict __format, ...),
        __isoc99_fscanf) __wur;
    extern int __REDIRECT (scanf, (const char *__restrict __format, ...),
        __isoc99_scanf) __wur;
    extern int __REDIRECT_NTH (sscanf, (const char *__restrict __s,
          const char *__restrict __format, ...),
          __isoc99_sscanf);
    
    0 讨论(0)
提交回复
热议问题