为什么 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
在下面的代码中-
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