如何执行表达式和参数?

S_D*_*S_D 1 c printf expression

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

在以下2个代码中;

代码1:

#include <stdio.h>

int main()
{

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

return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

ByeHello 5 3

代码2:

#include <stdio.h>

int main()
{

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

return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

HelloBye 8

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

hac*_*cks 6

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

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

- 在函数调用中计算参数中函数指示符,参数和子表达式的顺序(6.5.2.2).

6.5.2(P12):

示例在函数调用中

(*pf[f1()]) (f2(), f3() + f4())
Run Code Online (Sandbox Code Playgroud)

的功能f1,f2,f3,和f4可以以任何顺序调用.[...]

  • [可能的欺骗,先生?](/sf/ask/2173277151/) (2认同)