比较操作被完全忽略

时间:2014-07-27 18:27:18

标签: c if-statement comparison

我正在尝试为我正在制作的库编写测试程序。该测试程序应该测试进入某些功能的每个可能的值。这是代码:

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;
            }

这非常令人费解。知道为什么会这样,以及如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

testval的类型为int8_t,因此其可能值的范围为-0x800x7f。它永远不能等于0x80,因此等式关系总是假的,并且可以不断折叠和删除代码。