ベースアドレスと最上位アドレスで指定されたメモリブロックにパターンを書き込む (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 を引く)、このコードが最も単純で最も読みやすいと思います。既知のコンパイラ エラーでコードを記述することは悪いスタイルと見なされますか?