我似乎在比较结构的 2 个成员时遇到了麻烦。我可以在监视窗口中看到所有日志中的序列都0x000。
这个评估AllLogsNotZero为TRUE
for (i=0;(i<(3)&&(!AllLogsNotZero));i++)
{
UINT8 j;
j=i+1;
UINT16* comp1;
UINT16* comp2;
comp1 = (UINT16*) (&Data.log[i].Sequence);
comp2 = (UINT16*) (&Data.log[j].Sequence);
if ((Data.log[i].Sequence == Data.log[j].Sequence) == 0)
AllLogsNotZero=FALSE;
else
AllLogsNotZero=TRUE;
这个评估AllLogsNotZero为FALSE
for (i=0;(i<(3)&&(!AllLogsNotZero));i++)
{
UINT8 j;
j=i+1;
UINT16* comp1;
UINT16* comp2;
comp1 = (UINT16*) (&Data.log[i].Sequence);
comp2 = (UINT16*) (&Data.log[j].Sequence);
if (Data.log[i].Sequence == Data.log[j].Sequence)
AllLogsNotZero=FALSE;
else
AllLogsNotZero=TRUE;
我不知道为什么。
我认为你正在用鼹鼠山建造一座山。 我认为我使用您当前的变量名称编写循环的方式是:
bool AllLogsNotZero = true;
for (int i = 0; i < 4; i++)
{
if (Data.log[i].Sequence == 0)
{
AllLogsNotZero = false;
break;
}
}
if (AllLogsNotZero)
…processing option for no zero logs
else
…processing option for at least one log zero
我们可以争论循环限制应该是 3 还是 4(或其他值(;从你的代码中并不完全清楚,但你设置j
来i+1
并使用它,并将i
限制为 < 3
,所以当代码不使用 i+1
时,限制可能应该是 4。 最好有一个枚举或#define
值作为限制 - 名称将指示您正在测量的内容,而不仅仅是数字。
名字中的否定(AllLogsNotZero
(也使生活更加艰难;尽可能避免这种情况。 例如:
bool LogsZero = false;
for (int i = 0; i < 4; i++)
{
if (Data.log[i].Sequence == 0)
{
LogsZero = true;
break;
}
}
if (LogsZero)
…processing option for at least one log zero
else
…processing option for no zero logs
查看if语句
第一次检查:
//You check if they are the same
if (Data.log[i].Sequence == Data.log[j].Sequence)
第二次检查
//You check if they are not the same
if ((Data.log[i].Sequence == Data.log[j].Sequence) == 0)
//Can be evaluated as:
if (Data.log[i].Sequence != Data.log[j].Sequence)
for (i=0;(i<(3)&&(!AllLogsNotZero));i++)
{
UINT16 Var1 = 0;
if (Data.log[i].Sequence == Var1)
AllLogsNotZero=FALSE;
else
AllLogsNotZero=TRUE;
这行得通!!