小编mik*_*wei的帖子

g ++ bug?(bool_val?0:1)既不返回0也不返回1

我通过这个简单的演示重现了这个问题:

// bool_test_func.cpp
#include <stdio.h>

void func(bool* b) {
  int a = (*b ? 0 : 1);
  printf("%d\n", a); // EXPECT ether 0 or 1 here
}

// bool_test.cpp
void func(bool* b);

int main() {
  int n = 128;
  func((bool*)&n);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

-O0编译并运行:

g++ -g -O0 -Wall -o bool_test bool_test.cpp bool_test_func.cpp
mikewei@maclinux:~/testing/c++$ ./bool_test
0
Run Code Online (Sandbox Code Playgroud)

-O1编译并运行(意外结果):

g++ -g -O1 -Wall -o bool_test bool_test.cpp bool_test_func.cpp
mikewei@maclinux:~/testing/c++$ ./bool_test
129
Run Code Online (Sandbox Code Playgroud)

当我检查-O2 ASM代码时,我认为这是一个g ++错误,g ++的优化代码总是认为bool值是ether 1或0:


    00000000004005e6 :
      4005e6:       48 83 ec 08             sub …

c++ gcc

14
推荐指数
1
解决办法
1316
查看次数

标签 统计

c++ ×1

gcc ×1