【发布时间】:2014-02-09 12:45:08
【问题描述】:
我在 borland c 编译器中编写了以下程序。我怀疑为什么 c 编译器在编译时或运行时都没有抛出任何错误。程序执行良好,输出为 2 4。
#include<stdio.h>
#include<conio.h>
int main(){
int a=2,b=4,c=6;
printf("%d%d",a,b,c);
getch();
return 0;
}
即使格式说明符的数量少于参数的数量,也不会引发错误。这里发生了什么。
【问题讨论】:
-
它只是将前两个格式说明符替换为前两个变量值
-
获得更好的编译器:ideone.com/4cNhCg.
-
这就是为什么他们说启用编译器警告会有所帮助。
-
我认为这里重要的是
printf只是一个普通函数,它(通常)不会得到编译器的特殊处理。在它的核心编译器不必在格式说明符和参数之间建立任何关联——它所看到的只是一个字符串和一堆将在运行时进行评估的参数——并且可能会很乐意接受诸如尝试printfafloat和"%d"等。虽然现在有一些编译器和代码分析工具会警告你。 -
@user2802841 'printf' 接受带有 '%d' 的 'float' 值,但对于以下代码,输出很奇怪。 '浮点数=5.0; printf("%d",a);输出为 0'。
标签: c format format-specifiers