[OT] C-Frage

Kai Windmöller kai.windmoeller at gmx.de
Thu Feb 20 16:07:01 CET 2003


Jan-Benedict Glaw wrote:

>Hallo .*!
>
>---------------------------
>#include <stdio.h>
>#include <stdlib.h>
>#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
>
>static unsigned char a[] = {
>        "ASD"[1],
>        "Hello"[3],
>
                                        ^ ist das Komma zuviel? (nur 
eine dumme Idee)

>};
>
>int
>main(int argc, char *argv[])
>  
>

>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:-)
>

Wenn du die Zeichenketten generieren lässt, warum dann nicht noch ein 
Script drüberlaufen lassen, was genau die Zeichen herausholt die du 
brauchst?

static unsigned char a[] = {
        'S',
        'l'
};

statt

static unsigned char a[] = {
        "ASD"[1],
        "Hello"[3],
};

Wenn das nicht praktikabel ist, warum?

Gruß Kai





More information about the Linux mailing list