[OT] C-Frage

Jan-Benedict Glaw jbglaw at lug-owl.de
Thu Feb 20 10:12:02 CET 2003


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 at 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 at 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/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://lug-owl.de/pipermail/linux/attachments/20030220/1a34be87/attachment.sig>


More information about the Linux mailing list