可以看到Warning都是因为PART1中使用了格式符%I,而产生的。PART2则一切正常编译器没有给出任何警告信息。
但是——请看测试结果:
结果恰恰相反PART1的工作完全正常,PART2却产生了问题.
为什么呢我是这样猜想的:
进行函数参数类型检查的是在编译阶段,gcc编译器对这段代码进行检查显然它不认得"%I64d",
接着gcc发现整个格式字苻串里没有合法的说明符,但传给printf/scanf的除了格式字符串还有数据参数,
对于"%lld"和"%llu"gcc理所当然地接受了。悲剧就此埋下了伏笔
——于是就出現了上面的结果。