为什么编译器只为这个错误的程序产生警告而不是错误?
int main(){
int a=3,b=4;
printf("%d,%d");
return 0;
}
答案 0 :(得分:5)
您的程序有未定义的行为。由于printf
是一个可变函数,因此这里没有约束违规,因此甚至不需要编译器产生警告,更不用说错误了。除非可以证明在程序的任何执行期间达到调用未定义行为的语句,否则它不会产生错误;在你的情况下这是真的,但它只适用于最小的玩具例子,不值得尝试特殊情况。
请注意,对于非可变参数函数,具有错误参数数量的调用是违反约束的,这意味着编译器需要发出警告("生成诊断")并且可能会产生错误并拒绝编译该程序。