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