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

时间:2015-08-03 15:06:15

标签: c printf format-specifiers

在以下代码中 -

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格式说明符输出垃圾值。如果我们没有指定所需的参数数量,为什么不给出错误?这有时候有用吗?

代码链接:ideone

1 个答案:

答案 0 :(得分:3)

如果您传递的参数少于格式说明符,那么

undefined。编译器不需要在未定义的行为上产生任何错误。

虽然,大多数编译器都会这样做。例如,GCC为您的代码生成以下内容:

warning: too few arguments for format

编译时使用:

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