【发布时间】:2017-06-12 18:01:39
【问题描述】:
我似乎无法比较结构的 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;
我不知道为什么。
【问题讨论】:
-
由于您在询问的比较代码中没有使用
comp1或comp2,因此您应该从每个 sn-p 中删除这些行(其中 4 行)——这就是创建 MCVE (minimal reproducible example) 的“最小”部分。将您的代码制作成 MCVE 是个好主意。也值得使用UINT8 j = i + 1;来初始化变量,而不是使用两行。 (类似的 cmets 也适用于comp1和comp2。) -
AllLogsNotZero在两个循环之前的初始值是多少?