-2
#include<stdio.h>
int main()
{
int i=8,j=5,x;
i++;
printf("%d,%d,%d,%d",i++,j,x=i+i+++j++,i);
}
輸出中:10,6,24,11 我的最終值是11,x應等於26.爲什麼它的值是24?怎麼做了很多增量和減量操作的一個變量一個printf函數工作
#include<stdio.h>
int main()
{
int i=8,j=5,x;
i++;
printf("%d,%d,%d,%d",i++,j,x=i+i+++j++,i);
}
輸出中:10,6,24,11 我的最終值是11,x應等於26.爲什麼它的值是24?怎麼做了很多增量和減量操作的一個變量一個printf函數工作
答案很簡單 - 它沒有,所以不要做:)
從http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf第10頁注15:「個體經營的操作數的評價和個人表達的子表達式的是未測序。」換句話說,如果你有「模棱兩可的」語句(比如這些增量),那麼操作和評估的順序是不確定的 - 即留給編譯器編寫者。
所以,只是另一個避免編寫模糊代碼的原因。