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