16.3 为什么当 n 为 long int, printf("%d", n);  编译时没有匹配警告?我以为 ANSI 函数原型可以防止这样的类型不匹配。

当一个函数用可变参数时, 它的原型说明没有也不能提供可变参数的数目和类型。 所以通常的参数匹配保护适用于可变参数中的可变部分。 编译器不能执行内含的转换或警告不匹配问题16.1

参见问题 5.2, 11.4, 12.7 和 15.2



脚注

... 编译器不能执行内含的转换或警告不匹配问题16.1
译者注: 现代的编译器 (例如  gcc), 如果打开编译警告参数, 编译器对标准中的可变参数函数 (printf, scanf ... 等) 会进行匹配测试。象问题中的源代码, 用 ``gcc -Wall" 进行编译, 会给出这样的警告: ``warning: int format, long int arg (arg 2)"
翻译朱群英、孙云, LaTeX2HTML 编译 朱群英 (2005-06-23)