【问题标题】:Function execution order - cpp [duplicate]函数执行顺序 - cpp [重复]
【发布时间】:2014-04-16 10:59:46
【问题描述】:

以下代码

void function(char* p1, char* p2)
{
    // [...]
    return;
}
char* print(char* msg)
{
    printf("%s\n", msg);
    return msg;
}
function(print("first"), print("second"));

给出如下输出: 第二 首先

我很好奇为什么它的执行功能是从右到左的。

【问题讨论】:

标签: c++ function


【解决方案1】:

C++ 标准,函数调用 (5.2.2/4) 说:

当一个函数被调用时,每个参数都应该用它对应的参数进行初始化。 [注意:这样的初始化相对于彼此的顺序是不确定的——结束说明]

您的编译器,对于那段代码,选择按从右到左的顺序初始化参数。呈现不同的代码,甚至相同的代码,您的编译器可能会做出不同的选择。顺序只是标准未指定,您不能依赖它。

如果您希望强制执行特定顺序,您必须明确地对这些函数调用进行排序。

【讨论】:

    【解决方案2】:

    这个问题是因为函数使用了堆栈内存。

    function(print("first"), print("second"));

    这个函数的执行如下:

    // Push Operation
    1. Call function()
    2. Call print("First")
    3. Call Print("Second")
    
    // Pop Operation
    
    4. Execute Print("Second")
    5. Execute Print("First")
    6. Execute function()
    

    因此输出为Second First

    更多信息可以参考Link

    希望这能帮助你理解

    【讨论】:

      猜你喜欢
      • 2013-04-19
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      相关资源
      最近更新 更多