c++ - 将 void* 与 uint16_t 进行比较

标签 c++ gcc gcc4.6

在一些在 GCC 4.6 上编译良好的遗留代码(使用 -fpermissive)中,我有这个:

uint16_t a = 0;
void* b = ...;

if(b == a) // ...

这种比较在 GCC 4.6 上定义明确吗?它向下转换为 16 位还是向上转换为 32/64 位?

最佳答案

看起来它向上转换了 16 位整数以匹配指针大小。 运行以下代码输出 "upcast"

uint16_t a = 1;
void* b = (void*)0x10001;
(b == a) ? printf("downcast") : printf("upcast");

关于c++ - 将 void* 与 uint16_t 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22863470/

相关文章:

c - fscanf 将输出写入变量的索引中

c++ - Boost MPI 在监听列表时不释放资源?

c++ - 平方根元函数?

c++ - 如何处理请求时可能不会终止的线程?

c++ - 如何为 Code Blocks 13.12 编译 boost 1.55.0 至 win7(32 位)?

linux - '#pragma GCC optimize ("O 3")' 是什么意思?

xcode - 在 Mac OSX 10.6.8 上安装 f2c

android - 构建链接到其他非标准共享库的共享库