我在写一些将虚拟地址映射到物理地址的代码。可以比较C中的指针和整数吗?
我沿着这些线路代码:
if (address > 0xFFFF)
Status = XST_FAILURE; // Out of range
else if (address <= 0xCFFF || address >= 0xD400) {
// Write to OCM
Xil_Out8(OCM_HIGH64_BASEADDR + OCM_OFFSET + address, data);
else { // (address >= 0xD000)
// Write to external CCA
Status = ext_mem_write(address, data);
我得到一个编译器警告: comparison between pointer and integer [enabled by default]
我意识到,我比较了两种不同类型(指针和整数),但是这是一个问题?毕竟,比较指向一个整数的指针正是我想要做的。
定义指针常量来比较而不是整数会更清晰吗?
const int *UPPER_LIMIT = 0xFFFF;
...
if (address > UPPER_LIMIT){
....
最好将指针转换为整数,而不是将整数转换为指针。这是因为指针的比较运算符没有很好的定义,但是对于它们的整数。 – 2015-03-13 19:30:15
指针通常是一个无符号整数,将其与有符号整数进行比较可能会由于转换而产生意外的结果。 – dtech 2015-03-13 19:31:05
一旦您确信自己所做的工作,使用强制转换来击败编译器警告,而不是禁用警告。但只有这样;)。也许从@EugeneSh实施建议。将删除警告。 – 2015-03-13 19:34:05