因此,通过查询所有内容并了解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
在第一个程序中;表达式似乎是从右到左执行,但在第二个代码中,表达式从左到右执行。为什么会这样呢?表达式是如何执行的?
答案 0 :(得分:6)
函数参数的评估顺序不保证按任何顺序排列,即未指定评估顺序。他们可以按任何顺序进行评估。
n1570-J.1未指明的行为:
- 在函数调用中评估参数中函数指示符,参数和子表达式的顺序(6.5.2.2)。
6.5.2(P12):
示例在函数调用
中(*pf[f1()]) (f2(), f3() + f4())
可以按任何顺序调用函数
f1
,f2
,f3
和f4
。 [...]