我正在编写一些代码(在 FPGA 上运行),将模式写入由其基地址和最高地址指定的内存块。数据宽度为 64 位,地址空间为 32 位。在我的系统中,long 是 32 位,long long 是 64 位。代码看起来像这样:
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),但我认为这段代码是最简单和最易读的。编写带有已知编译器错误的代码是否被认为是不好的风格?