使用嵌套的printf语句给出奇怪的输出

时间:2014-02-17 20:19:10

标签: c printf

我最近遇到过这段代码而我无法理解它是如何工作的

#include<stdio.h>
int main(){
    printf("Line 1\n",
    printf("Line 2\n",
    printf("Line 3\n",
    printf("Line 4\n",
    0))));
return 0;
}

它提供以下输出:

Line 4
Line 3
Line 2
Line 1

3 个答案:

答案 0 :(得分:4)

这一点都不奇怪。 表达式从内到外进行评估(执行),就像数学表达式一样。

所以说出简单的术语:首先评估/执行围绕它的括号最多的表达

简化为:

printf("1", printf("2", printf("3", printf("4"))));

答案 1 :(得分:4)

printf用于打印格式化的行。例如,要打印整数,请调用:

printf( "%d", 1 );

您所做的是使用嵌套print的返回值作为参数调用它,这意味着它首先需要评估嵌套调用。您的电话类似于:

int temp;
temp = printf("Line 4\n", 0);
temp = printf("Line 3\n", temp);
temp = printf("Line 2\n", temp);
temp = printf("Line 1\n", temp);

另外,请注意,由于格式字符串中没有格式说明符,因此第二个参数没有任何意义,如果编译器足够好,它甚至会警告你。

答案 2 :(得分:3)

您需要在实际调用之前评估函数的参数。因此,最内层的印刷品首先被称为。