sil*_*ash 16 c compiler-construction
在我参加的考试中有一个问题.问题是:
以下代码的输出结果如何:
#include<stdio.h>
#include<conio.h>
void main()
{
int a=5, b=6, c=7;
printf("%d%d%d");
}
Run Code Online (Sandbox Code Playgroud)
我的回答:它会发出警告,因为printf没有提供所需的参数.
如果你将运行它,你将获得垃圾值.
老师给了我零.据他说,答案是价值将以相反的顺序打印,即输出将是"765".
问题是他正在使用Turbo C++编译器,我通常使用GCC.我可以得到一些评论和解释来取回我的分数吗?或者我的回答真的错了?
Mak*_*zin 25
这是一个未定义的行为,所以绝对会发生任何事情.
实际上可能会打印局部变量,因为在某些系统上,Xprintf函数族可能会将其参数从堆栈中弹出(stdarg.h工具可用于实现此类函数).您的变量a,b,c可能恰好位于内存位置,va_arg宏将从该位置提取参数.这些是库实现/执行环境的细节,并不是标准的一部分,因此它们可以在不同的目标平台之间变化.
以下是c99标准描述fprintf函数的引用:
7.19.6.1 fprintf函数
2/fprintf函数在format指向的字符串的控制下将输出写入stream指向的流,该格式指定后续参数如何转换为输出.如果格式的参数不足,则行为未定义. 如果参数保留时格式已用尽,则会评估多余的参数(一如既往),否则将被忽略.当遇到格式字符串的末尾时,fprintf函数返回.
| 归档时间: |
|
| 查看次数: |
1419 次 |
| 最近记录: |