2015-10-20 67 views
1

我想出一個非常有趣的問題,同時編程MPLAB IDE v8.92。 這僅僅是一個代碼snipit但是這是問題正在發生:如果語句跳過

struct data 
{ 
    INT32 value; 
}; 

struct data array[8] = {{0},{0},{0},{0},{0},{0},{0},{0}}; 
INT32 IOC[8]; 
INT32 IOD[8]; 


for (byte i = 0; i<8; i++) 
{ 
#ifdef DAC 
    IOC[i] = 0; 
    IOD[i] = 24; 
    if(array[i].value == 0) array[i].value == 1; 
#endif 
} 

代碼編譯沒有錯誤,當我通過這部分代碼步驟使用ICD 3調試,IOC和IOD被正確賦值,但if語句被跳過了!即調試器甚至不會停下來。任何想法可能發生了什麼?

+0

注:數組[X] .value的是一個32位的int。 –

+4

編譯器可能會注意到,'陣列[I] .value'總是等於零在該點,跳過'if'語句。沒有進一步的信息,很難說出發生了什麼。編譯器生成的程序集也可以提供幫助。你能把它分解成一個最小的自包含的例子嗎? – fuz

+0

編譯器可能已經推斷出所有的「值」都是非零的,並且優化了該語句。或者把它放在其他地方...... – vonbrand

回答

2

始終以-Wall -Werror編譯。您的發言將被標記在編譯時:warning: statement with no effect [-Wunused-value]

+0

雅,我剛剛發現如何將它添加到MPLAB中的編譯器。 XD感謝您的建議! –

+0

@ R.Johnson它有幫助。大約一年前,我已經[正確縮進]:* if(blah); x = 5; *縮進時,很難看到;如果。 1000行的三重桌面檢查代碼[甚至將其打印出來並逐行寫入]。 gcc中的編譯器錯誤;-)用clang重新編譯,因爲clang默認具有-Wempty-body,所以立即標記它。 gcc仍然沒有,即使有-Wall。即使有 - 空體,海灣合作委員會的信息是神祕的,叮噹是直接的。 –

0

謝謝大家誰幫助了。原來,我第一次在論壇上正確地編寫了代碼,但沒有在我的代碼中修正它。我編輯了問題以顯示錯誤。

if(array[i].value == 0) array[i].value == 1; 

應該是:

if(array[i].value == 0) array[i].value = 1; 

想這就是我得到盯着屏幕一整天XD