0

GCC 编译器会正确处理以下内容吗?

uint32 fn(uint32 adr, uint8 *ptr) {
    return (ptr==adr);
}

换句话说,它会自动将 ptr 转换为存储指向的内存地址的整数吗?

4

1 回答 1

1

是的,GCC 会正确处理它——通过诊断代码中的错误。

C 在整数类型和指针类型之间没有隐式转换(整数常量0被视为空指针常量的特殊情况除外),并且==不能比较整数和指针类型的值。

要更正错误,请添加强制转换(显式转换)以转换adr为 type uint8*

return ptr == (uint8*)adr;

或者,更好的是,首先将两个参数设为相同类型:

uint32 fn(uint8 *adr, uint8 *ptr) {
    return ptr == adr;
}

除非您有某些特定原因adr需要使用整数而不是指针,但您还没有告诉我们这个原因可能是什么。

C 的类型比很多人认为的要强。

于 2013-09-27T16:28:08.853 回答