void funcXX()
{
int a = 0;
//省略過程。
a = (a++)%2;
if (a == 0)
{
//邏輯省略。
}
}
意圖是每次調用此函數,a在0到1之間變換。
單不說a = (a++)%2寫法對不對,每次都初始化a,就知道不可能變,a肯定每次都是固定的值,要麼1,要麼0.
再說a = (a++)%2寫法。在C++標準中有一個很重要的概念:sequence points(順序點)。
原文定義如下:Between consecutive "sequence points" an object's value can be modified only once by an expression. 大致意思是說:在相鄰的兩個序點中間,一個object的值可以並且只能被賦值一次。
參考:MSDN:C Sequence Points:
http://msdn.microsoft.com/en-us/library/azk8zbxd.aspx
a = (a++)%2處於兩個連續的序點之間,a被賦值兩次。因此,a的值不確定,可能是1,也可能是0.實際驗證,VC中,a的值爲1,C196單片機編譯器KC196中,a的值爲0.
老老實實寫讓人明白的代碼,不要總是弄些故弄玄虛的東西,搬起石頭砸自己的腳。