我正在尝试为我正在制作的库编写测试程序。该测试程序应该测试进入某些功能的每个可能的值。这是代码:
void test_int8_smr()
{
for (int i = INT8_MIN; i <= INT8_MAX; i++)
{
int8_t testval = i;
int8_t result = from_int8_smr(to_int8_smr(testval));
if (testval != result)
{
if (testval == 0x80) // This if statement gets ignored.
{
continue;
}
printf("test_int8_smr() failed: testval = 0x%02hhX, result = 0x%02hhX\n", testval, result);
return;
}
}
printf("test_int8_smr() succeeded for all possible values. \n");
}
这是输出:
test_int8_smr()失败:testval = 0x80,result = 0x00
此if语句似乎被忽略:
if (testval == 0x80)
{
continue;
}
这非常令人费解。知道为什么会这样,以及如何解决这个问题?
答案 0 :(得分:4)
testval
的类型为int8_t
,因此其可能值的范围为-0x80
到0x7f
。它永远不能等于0x80
,因此等式关系总是假的,并且可以不断折叠和删除代码。