函数执行顺序-cpp

Function execution order - cpp

本文关键字:-cpp 顺序 执行 函数      更新时间:2023-10-16

以下代码

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

输出如下:第二第一个

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

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

当调用函数时,每个参数都应使用其相应的参数进行初始化。[注释:此类初始化彼此之间的顺序不确定--结束注释]

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

如果希望强制执行特定的顺序,则必须显式地对这些函数调用进行排序。

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

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

有关更多信息,请参阅链接。

希望这将帮助您理解