使問題清晰,我寫了一些測試代碼:調用函數
#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
這將是學習如何使用調試器來遍歷代碼的好機會。逐步通過可能會讓你很清楚發生了什麼事情。 –