-1
#include<stdio.h>
int main()
{
int i=2;
printf("%d %d\n",++i,++i);
return 0;
}
gcc上的輸出爲4 4。 請解釋此輸出C中前綴運算符的未定義輸出
#include<stdio.h>
int main()
{
int i=2;
printf("%d %d\n",++i,++i);
return 0;
}
gcc上的輸出爲4 4。 請解釋此輸出C中前綴運算符的未定義輸出
這是未定義的行爲。功能參數的評估順序不是由C標準定義的。
有關章節:C99節6.5.2.2第10段
功能指示符的評價的順序,實際 參數和子表達式的實際參數內是 未指定的,但有一個順序點在實際通話之前。
也C99第6.5.2.2節第10
有功能 指定者的評價和實際參數之後,但在實際調用之前的順序點。在調用函數主體(包括其他函數調用) 中的每個 評估在被調用函數的主體的執行之前或之後未被特別地排序是不確定的 關於被調用函數的執行的排序。94)
你自己寫過,它在標題中是「未定義的」。還有什麼可以解釋的呢? – Paulpro
因此每次對這些問題的答案都是不可預測的? – user2492165
@ user2492165是的,你可以說.. – VoidPointer