当我遇到一种非常奇特的行为时,我正在编写一个非常简单的C / C ++程序。
按顺序调用任意两个函数时,它们按照调用它们的顺序运行。例如,如果我打印出字符串“hello”然后打印字符串“world”,我希望在控制台中打印字符串“helloworld”,这通常会按预期发生。
但是,当在另一个函数的调用中调用两个函数时,它们以相反的顺序执行。这在以下代码中进行了演示:
#include <iostream>
#include <stdarg.h>
void collector(int n, ...)
{
va_list args;
va_start(args, n);
for (int i = 0; i < n; i++)
{
int elem = va_arg(args, int);
// Do something with the returns
}
va_end(args);
return;
}
int printAndReturn(const char *message)
{
std::cout << message << std::endl;
if (message == "foo")
{
return 1;
}
return 0;
}
int main(void)
{
collector(2, printAndReturn("foo"), printAndReturn("bar"));
printAndReturn("foo");
printAndReturn("bar");
return 0;
}
运行这个简单程序的预期输出是:
FOO
巴
FOO
巴
相反,我在控制台中看到的实际输出是:
巴
FOO
FOO
巴
我不明白为什么会这样。这与编译C / C ++的方式有关吗?
这个问题的答案是肯定还是否定,是否可以修复而不必颠倒函数调用的顺序?
非常感谢您的时间和精力。 :)