【编程初入门】 看C Primer Plus 看到占位符问题,测试和书上写的不一样。

代码如下:

  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 }

书上是这么说的:

clipboard.png

书上的意思是,我前面写的代码B这个位置,因为少写了两个值,所以和格式说明符的书目显示不一致。但是编译器不会报错,而是会使用内存中的任意值为其余的%d。
于是我自己用代码在linux上面测试,代码如下:

clipboard.png

测试结果如下:

clipboard.png

我想问,这个问题出在哪儿呢?
是我这个系统的编译器和书上作者的编译器不一样么? 现在编译器变智能了?

阅读 2.4k
2 个回答

1.warning是警告,程序依然可以通过编译;error才是错误,程序无法通过编译。
2.gcc足够智能,可以检测到包括printf传参数量不一致,甚至是类型错误等问题。

warning,警告

error,错误

书上:编译器不会报错

所以你是怎么理解的?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进