我在写一些代码(在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),但我认为这个代码是最简单和最易读的。编写具有已知编译器错误的代码是否被认为是不好的风格?