我在寫一些將虛擬地址映射到物理地址的代碼。可以比較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