__isoc99_scanf和scanf

前端之家收集整理的这篇文章主要介绍了__isoc99_scanf和scanf前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究GCC中的各种编译器选项,并在我对要使用的标准进行更改时观察更改.
$gcc Q1.c -Wall -save-temps -o Q1
$vi Q1.s

我看到其中一个操作码为

call    __isoc99_scanf

现在当我用C89标准编译时

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

我认为操作码是

call    scanf

这两种scanf形式有什么区别?任何我可以看到他们的来源的链接将受到高度赞赏.

解决方法

原因是严格遵循c99禁止一些现有的GNU扩展转换说明符.

在glibc 2.17中,在libio / stdio.h中有这样的评论

/* 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,__isoc99_sscanf);

猜你在找的C&C++相关文章