我已经看过关于i ++ ++ i等的问题,但我有一个小的,有点不同的问题。 假设我有这样的事情:
printf("%d %d", P, P);
和P是一个函数
int P(){
printf("HEY");
return 0;
}
将要打印什么 HEYHEY00或HEY0HEY0?
答案 0 :(得分:3)
跑吧。
这个程序:
#include <stdio.h>
int P(){
printf("HEY");
return 0;
}
int main() {
printf("%d %d", P(), P());
return 0;
}
输出:
HEYHEY0 0
为什么呢?在实际输入printf的代码之前,会对参数进行求值(P被调用)。
编辑:根据@Shafik bellow,C标准不保证参数评估的顺序,所以如果有两个函数具有不同的字符串,那么这些字符串的顺序就不会是可以预测的。答案 1 :(得分:2)
根据标准对 printf()中的参数进行评估是未定义的。但它只在对参数进行全面评估后打印。 所以在上面的例子中,首先评估p()&,然后当他们评估时打印&#34; HEY&#34;先打2次,然后打印返回值(0和0),输出变为&#34; HEYHEY00&#34; 。