如何执行表达式和参数?

时间:2018-02-01 13:11:12

标签: c printf expression

因此,通过查询所有内容并了解std库函数的行为来学习C,我遇到了这个:

在以下2个代码中;

代码1:

#include <stdio.h>

int main()
{

printf(" %d %d",printf("Hello"),printf("Bye"));

return 0;
}

输出:

  

ByeHello 5 3

代码2:

#include <stdio.h>

int main()
{

printf(" %d",printf("Hello")+printf("Bye"));

return 0;
}

输出:

  

HelloBye 8

在第一个程序中;表达式似乎是从右到左执行,但在第二个代码中,表达式从左到右执行。为什么会这样呢?表达式是如何执行的?

1 个答案:

答案 0 :(得分:6)

函数参数的评估顺序不保证按任何顺序排列,即未指定评估顺序。他们可以按任何顺序进行评估。

n1570-J.1未指明的行为:

  

- 在函数调用中评估参数中函数指示符,参数和子表达式的顺序(6.5.2.2)。

6.5.2(P12):

  

示例在函数调用

(*pf[f1()]) (f2(), f3() + f4())
     

可以按任何顺序调用函数f1f2f3f4。 [...]