代码如下:
1 #include <stdio.h>
2
3 void main(void) {
4
5 int ten = 10;
6 int two = 2;
7 printf("%d minus %d is %d\n",ten,2,ten-two);//代码A
8 printf("%d minus %d is %d\n",ten); //代码B,因为少了两个值,按理说是要出错的
9
10 }
书上是这么说的:
书上的意思是,我前面写的代码B这个位置,因为少写了两个值,所以和格式说明符的书目显示不一致。但是编译器不会报错,而是会使用内存中的任意值为其余的%d。
于是我自己用代码在linux上面测试,代码如下:
测试结果如下:
我想问,这个问题出在哪儿呢?
是我这个系统的编译器和书上作者的编译器不一样么? 现在编译器变智能了?
1.warning是警告,程序依然可以通过编译;error才是错误,程序无法通过编译。
2.gcc足够智能,可以检测到包括printf传参数量不一致,甚至是类型错误等问题。