为什么 printf 中缺少参数不会产生错误

Why doesn't a missing parameter in printf produce an error

在下面的代码中-

int main() {
    // your code goes here
    int a=10,b=20,c=30;
    printf("%d %d %d\n",a,b,c);
    printf("%d %d %d %d %d %d\n",a,b,c);
    return 0;
}

输出在各自的位置包含 10,20 和 30,但剩余的 %d 格式说明符输出垃圾值。如果我们没有指定所需数量的参数,为什么它不报错?这有时有用吗?

代码link:ideone

如果您传递的参数少于格式说明符,则为 undefined。编译器不需要对未定义的行为产生任何错误。

不过,大多数编译器都可以。例如,GCC 为您的代码生成以下内容:

warning: too few arguments for format

编译时:

gcc -Wall -Wextra -std=c99 file.c