コンパイル時に配列の整列を8にチェックしようとしています。これはコードです:コンパイル時にC配列の整列チェック
// File scope
uint32_t pool[1024];
bool aligned = (((uintptr_t) pool) % 8) == 0;
このエラーが発生します:イニシャライザ要素は読み込み時に計算できません。しかし、私は4の配列の配列をチェックすると、私はエラーを取得しません。以下のコード:
// File scope
uint32_t pool[1024];
bool aligned = (((uintptr_t) pool) % 4) == 0;
言語:C
ツールチェイン:アームなし、EABI-GCC
コンパイラオプション:-mcpu =皮質-M3 -mthumb
なぜこの出来事であります?
なぜコンパイル時に完了したと思いますか?あなたが書いた表現はランタイム表現です...何が恋しいのですか? –
コンパイラはおそらく 'pool'に対して4バイトのアライメントを必要としており、整列されたアドレスが使用されていてもアドレスmod 4が0になることを認識するのに十分です。おそらく0か4のどちらかになるアドレスのMOD 8についても同じことは言えません。 –
@TomKarzesありがとう、あなたのコメントは私が探していたものです。 –