Hallo .*! --------------------------- #include <stdio.h> #include <stdlib.h> #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0])) static unsigned char a[] = { "ASD"[1], "Hello"[3], }; int main(int argc, char *argv[]) { int i; for(i = 0; i < ARRAY_SIZE(a) - 1; i++) printf("%d - 0x%02x\n", i, a[i]); return EXIT_SUCCESS; } ----------------------------------- Das Problem ist a[]. Wenn es so wie jetzt da steht, dann kompiliert's nicht: jbglaw@baerchen:~$ gcc test.c test.c:6: initializer element is not constant test.c:6: (near initialization for `a[0]') test.c:7: initializer element is not constant test.c:7: (near initialization for `a[1]') Packe ich a[] in eine Funktion (main() z.B.), dann wird das brav zugelassen (und der gcc optimiert auch netterweise "ASD" und "Hello" heraus). Um den Style einzuhalten (und die Daten nicht auf den Stack zu packen, das sind in der Realität nämlich 'nen paar Bytes mehr...) soll das Array aber gleich an den Anfang, und halt _nicht_ in eine Funktion hinein. Das Progrämmchen oben ist nur ein testcase - in Wirklichkeit werden die initializers von a[] durch Macros erzeugt (und sind viel länger), aber die Kurzfassung reicht da schon:-) Hat jemand dazu einen Tip für mich? MfG, JBG -- Jan-Benedict Glaw jbglaw@lug-owl.de . +49-172-7608481 "Eine Freie Meinung in einem Freien Kopf | Gegen Zensur fuer einen Freien Staat voll Freier Bürger" | im Internet! Shell Script APT-Proxy: http://lug-owl.de/~jbglaw/software/ap2/
Teilnehmer (3)
-
Florian Lohoff
-
Jan-Benedict Glaw
-
Kai Windmöller