2015-10-20 64 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