当两个函数位于一行中时,堆栈框架的样子

How stack frames look like when two functions lie in one line?

本文关键字:堆栈 框架 于一行 两个 函数      更新时间:2023-10-16

例如,我们有

int p(void) {
  return 4;
}
int q(void) {
  return 5;
}
int main(void) {
  int x = p() + q();
  return 0;
}

在这种情况下,堆栈框架的外观如何?确切地说,P和Q是同时评估P和Q,还是首先将P评估为4后,该程序将进行q?

来自cppreference

几乎所有C 操作员的操作数评估顺序(包括函数参数的评估顺序功能通话表达和评估顺序任何表达式中的子表达(未指定。编译器可以按任何顺序评估操作数,并且可以选择其他顺序再次评估相同的表达。

此规则有例外。

除非下面指出,但没有从左到右的概念C 的权利评估。这不是要混淆运营商的左右右至左右关联:表达式F1(( f2(( f3((被解析为(f1(( f2((( f3((操作员 ,的从左到右关联可以在运行时间首先评估F1((或F2((之间的评估