__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&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...