Ich versuche eine Array-Ausrichtung von 8 zur Kompilierzeit zu überprüfen. Dies ist der Code:Überprüfung der C-Array-Ausrichtung zur Kompilierzeit
// File scope
uint32_t pool[1024];
bool aligned = (((uintptr_t) pool) % 8) == 0;
Ich bekomme diesen Fehler: Initialisierungselement ist nicht berechenbar bei Ladezeit. Wenn ich jedoch die Array-Ausrichtung von 4 überprüfe, erhalte ich den Fehler nicht. Der folgende Code:
// File scope
uint32_t pool[1024];
bool aligned = (((uintptr_t) pool) % 4) == 0;
Sprache: C
Toolchain: arm-none-EABI-gcc
Compiler-Optionen: -mcpu = Cortex-M3 -mthumb
Warum ist das passiert ?
Warum denken Sie, dass es zur Kompilierzeit gemacht wird? Der Ausdruck, den du geschrieben hast, ist ein Laufzeitausdruck ... was vermisse ich? –
Der Compiler erfordert wahrscheinlich eine 4-Byte-Ausrichtung für "pool" und ist intelligent genug, um zu erkennen, dass die Adresse mod 4 0 ist, unabhängig davon, welche ausgerichtete Adresse verwendet wird. Das selbe kann nicht für die Adresse mod 8 gesagt werden, die vermutlich entweder 0 oder 4 sein wird. –
@TomKarzes danke, dein Kommentar ist, was ich suchte. –