功能执行顺序 - cpp

时间:2014-04-16 10:59:46

标签: c++ function

以下代码

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

给出如下输出: 第二 第一

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

2 个答案:

答案 0 :(得分:1)

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

  

调用函数时,每个参数都应使用相应的参数进行初始化。 [注意:此类初始化相对于彼此不确定地排序 - 结束注释]

您的编译器为该段代码选择按从右到左的顺序初始化参数。提供不同的代码,甚至相同的代码,您的编译器可以做出不同的选择。订单根据标准没有明确规定,您不能依赖它。

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

答案 1 :(得分:-1)

此问题是由于函数使用的堆栈内存。

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

希望这会帮助您理解