C 完全忽略比较操作

C 完全忽略比较操作,c,if-statement,comparison,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)

我正在尝试为我正在制作的库编写一个测试程序。该测试程序应该测试进入某些函数的每个可能值。代码如下:

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

这是非常令人困惑的。知道为什么会发生这种情况以及如何解决吗?

testval
具有类型
int8\u t
,因此其可能的值范围是
-0x80
0x7f
。它永远不可能等于
0x80
,因此等式关系总是错误的,并且会不断折叠和删除死代码。

testval
具有类型
int8\u t
,因此它的可能值范围是
-0x80
0x7f
。它永远不可能等于
0x80
,因此等式关系总是错误的,需要不断地折叠和删除死代码。

我认为编译器正在优化代码,因为您没有在其中执行任何操作,所以它会忽略它。你能放一个
printf
看看会发生什么吗?@user3121023:从OP的代码中不清楚这是错误的还是正确的行为。我认为编译器正在优化代码,因为你没有在那里做任何事情,所以它会忽略它。你能放一个
printf
看看会发生什么吗?@user3121023:OP的代码不清楚这是错误的还是正确的行为。
            if (testval == 0x80)
            {
                continue;
            }