我在寫一些代碼(在FPGA上運行),它將一個模式寫入由其基地址和最高地址指定的內存塊。數據寬度是64位,地址空間是32位。在我的系統中,長整型是32位,長整型是64位。該代碼看起來是這樣的:使用64位整數迭代器的32位地址空間?
unsigned long base_addr = 0xC0000000;
unsigned long high_addr = 0xFFFFFFFF;
unsigned long long i;
for(i = base_addr; i <= high_addr; i += 4){
*((unsigned long *) i) = some_pattern;
}
一切工作正常,但我得到一個「投給指針由大小不同的整數」從編譯器警告。如果我使用32位迭代器變量,則代碼會循環無限,因爲迭代器會觸發0xFFFFFFFC,然後再次溢出回到0。
有沒有更好的方法來做到這一點?我知道有很多方法可以毫無問題地使用32位迭代器(檢測/預測溢出,從high_addr中減去3),但我認爲這個代碼是最簡單和最易讀的。編寫具有已知編譯器錯誤的代碼是否被認爲是不好的風格?