GCC 编译器会正确处理以下内容吗?
uint32 fn(uint32 adr, uint8 *ptr) {
return (ptr==adr);
}
换句话说,它会自动将 ptr 转换为存储指向的内存地址的整数吗?
是的,GCC 会正确处理它——通过诊断代码中的错误。
C 在整数类型和指针类型之间没有隐式转换(整数常量0
被视为空指针常量的特殊情况除外),并且==
不能比较整数和指针类型的值。
要更正错误,请添加强制转换(显式转换)以转换adr
为 type uint8*
:
return ptr == (uint8*)adr;
或者,更好的是,首先将两个参数设为相同类型:
uint32 fn(uint8 *adr, uint8 *ptr) {
return ptr == adr;
}
除非您有某些特定原因adr
需要使用整数而不是指针,但您还没有告诉我们这个原因可能是什么。
C 的类型比很多人认为的要强。