was bewirkt static in folgendem Kontext: "int i[static 4]"?
-
Moin,
ich lese gerade den Code der XZ-Utils. Dort wird ein Konstrukt verwendet, was mir bisher nicht geläufig ist (bin nicht so der C-Programmierer). Beispielweise in dieser Funktion:
static inline uint32_t integer_read_32(const uint8_t buf[static 4]) { uint32_t ret = *(const uint32_t *)(buf); return integer_le_32(ret); }
Kann mir jemand erklären, was das
static
im Parameterbuf[static 4]
bedeutet/bewirkt?Vielen Dank,
Hilefoks
-
Das heißt, dass an buf ein Array mit mindestens 4 Elementen übergeben wird. Dadurch kann der Compiler besser optimieren (besonders für SIMD).
-
Das ist also ein Hinweis an den Compiler und als solches dann kein Fehler, wenn das Array eine abweichende Größe hat (sowohl größer als auch kleiner als angegeben).
Wieder etwas gelernt...
Vielen Dank!
-
Hilefoks schrieb:
Das ist also ein Hinweis an den Compiler und als solches dann kein Fehler, wenn das Array eine abweichende Größe hat (sowohl größer als auch kleiner als angegeben).
Nein. Die Angabe ist eine Garantie die der Programmierer dem Compiler gibt (damit dieser eben besser optimieren kann). Daran musst du dich halten. Du garantierst, dass buf _mindestens_ 4 Elemente hat. Mehr können es gerne sein, weniger dürfen es aber nicht sein.