为什么 gcov 不包含逻辑 && 运算符?

Why gcov is not covering logical && operator?

我正在做单元测试的代码是这样的:

     if(((State !=TCPIP_IPADDR_STATE_ASSIGNED)&& (State !=TCPIP_IPADDR_STATE_ONHOLD) && (State !=TCPIP_IPADDR_STATE_UNASSIGNED)) ||(SoConId==DOIP_INVALID_16))
       {
        }

我的单元测试用例包括以下内容:

`DoIP_LocalIpAddrAssignmentChg(12,0xFF);`

其中DoIP_LocalIpAddrAssignmentChg为if所在的函数名,0xFF为无效状态,显然不等于所有3:TCPIP_IPADDR_STATE_ASSIGNED , TCPIP_IPADDR_STATE_ONHOLD, TCPIP_IPADDR_STATE_UNASSIGNEDSoConId 的值为 12DOIP_INVALID_16的值=0xFF.

所以当我检查我的单元测试报告时,它给出了这个结果: 我的问题是为什么它没有涵盖 TCPIP_IPADDR_STATE_UNASSIGNED 的条件,因为我传递的状态值是 0xFF,这是无效值。

你是一个 "victim" 懒惰的评估者。

第 6.5.14 章"Logical OR opeartor":

If the first operand compares unequal to 0, the second operand is not evaluated.

多重与的所有三个部分都是 true,因此不等于 0。

两个逻辑&&都被覆盖了,但是你看不到,因为同一行的||没有完全执行