我似乎在比较一个结构的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;
我不知道为什么。
答案 0 :(得分:3)
我认为你是在一个小山丘上建造一座山。我认为我使用您当前的变量名称编写循环的方式是:
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
,因此当代码没有&#时39; t使用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
答案 1 :(得分:2)
查看陈述
首先检查:
//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)
答案 2 :(得分:0)
for (i=0;(i<(3)&&(!AllLogsNotZero));i++)
{
UINT16 Var1 = 0;
if (Data.log[i].Sequence == Var1)
AllLogsNotZero=FALSE;
else
AllLogsNotZero=TRUE;
这有效!!