使问题清晰,我写了一些测试代码:调用函数
#include <stdio.h>
#include <string.h>
char *foo(int a) {
printf("%d\n", a);
static char string[2];
string[0] = a > 0? '1' : '0';
string[1] = '\0';
return string;
}
int main(void) {
printf("%s\t%s\n", foo(1), foo(0));
return 0;
}
运行代码给出了这样的输出:
0
1
1 1
我有这里有两个问题: 1.为什么在1之前打印0?在main的printf函数中,第二个foo会在第一个之前执行?这是一种确定的行为还是偶然的。 2.为什么最终输出1,1?预期的结果应该是1,0
未指定函数参数的评估顺序。 –
@Enrico Granata - 他在问C而不是C++ – Joseph
这将是学习如何使用调试器来遍历代码的好机会。逐步通过可能会让你很清楚发生了什么事情。 –