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