Arraydefinition unter C (ISO C90)

  • Hallo!
    Da ich ja bei sysprog mit -ansi -pedantic -Wall -g -c kompilieren darf habe ich einen haufen schöner fehlermeldungen die ohne die ganzen argumente nicht kamen. ich habe es endlich geschafft die zahl auf 1 zu reduzieren, und zwar diesen hier:

    Code
    int forbidden[] = {     0x24,0x26,0x2B,0x2C,0x2F,0x3A,0x3B,0x3D,0x3F,0x40,
                    0x20,0x22,0x23,0x25,0x3C,0x3E,0x5B,0x5D,
                    0x60,0x5C,0x5E,0x7B,0x7D,0x7C,0x7E };

    und der compilermeldung:

    Code
    ue1.c:53: warning: ISO C90 forbids mixed declarations and code


    was ich machen soll weiß ich mittlerweile (variable nicht mit wert initialisieren - das waren etwa 80% der fehler ^^) aber ich habe keine ahnung wie ich das machen kann ohne die 25 werte einzeln reinzuschreiben (was ich eigentlich nicht will)

    ich bin sicher, dass das ein kleines problem ist, aber ich weiß nichtmal genau wonach ich suche :)
    lg,
    Lukas

  • probier mal:

    Code
    int forbidden[];
    forbidden = {     0x24,0x26,0x2B,0x2C,0x2F,0x3A,0x3B,0x3D,0x3F,0x40,
                    0x20,0x22,0x23,0x25,0x3C,0x3E,0x5B,0x5D,
                    0x60,0x5C,0x5E,0x7B,0x7D,0x7C,0x7E };
  • so kreativ war ich auch schon ;)

    ue1.c:53: error: array size missing in ‘forbidden’
    ue1.c:53: warning: ISO C90 forbids mixed declarations and code
    ue1.c:54: error: expected expression before ‘{’ token

    53: int forbidden[];
    54: forbidden = { ...};

  • Diese codezeile funktioniert nicht in C:

    Code
    int forbidden[];

    da es nur fixed-size arrays gibt. Insofern ist

    Code
    int forbidden[] = {     0x24,0x26,0x2B,0x2C,0x2F,0x3A,0x3B,0x3D,0x3F,0x40,
                    0x20,0x22,0x23,0x25,0x3C,0x3E,0x5B,0x5D,
                    0x60,0x5C,0x5E,0x7B,0x7D,0x7C,0x7E };

    nur eine Abkürzung (wenn ich mich nicht verzählt hab) für

    Code
    int forbidden[25] = {     0x24,0x26,0x2B,0x2C,0x2F,0x3A,0x3B,0x3D,0x3F,0x40,
                    0x20,0x22,0x23,0x25,0x3C,0x3E,0x5B,0x5D,
                    0x60,0x5C,0x5E,0x7B,0x7D,0x7C,0x7E };



    Der Grund, warum die Warning ausgegeben wird, ist folgender. Nimm mal das Prog:

    Code
    #include <stdio.h>
    int main(int argc, char* argv[]) {
      printf("Foo\n");
      int forbidden[] = { 0x24,0x26,0x2B,0x2C,0x2F,0x3A,0x3B,0x3D,0x3F,0x40,
                  0x20,0x22,0x23,0x25,0x3C,0x3E,0x5B,0x5D,
                  0x60,0x5C,0x5E,0x7B,0x7D,0x7C,0x7E };
      return 0;
    }

    und compile es mit "gcc -ansi -pedantic -W -Wall -g foo.c". Es werden folgende Warnings ausgegeben:
    foo.c: In function ‘main’:
    foo.c:4: warning: ISO C90 forbids mixed declarations and code
    foo.c:4: warning: unused variable ‘forbidden’
    foo.c: At top level:
    foo.c:2: warning: unused parameter ‘argc’
    foo.c:2: warning: unused parameter ‘argv’

    Schiebt man nun die Variablendeklaration an den Anfang (wie es sich für den C90 Standard gehört), wird nun keine "böse" Warning mehr ausgegeben:

    Code
    #include <stdio.h>
    int main(int argc, char* argv[]) {
      int forbidden[] = { 0x24,0x26,0x2B,0x2C,0x2F,0x3A,0x3B,0x3D,0x3F,0x40,
                  0x20,0x22,0x23,0x25,0x3C,0x3E,0x5B,0x5D,
                  0x60,0x5C,0x5E,0x7B,0x7D,0x7C,0x7E };
      printf("Foo\n");
      return 0;
    }

    foo.c: In function ‘main’:
    foo.c:3: warning: unused variable ‘forbidden’
    foo.c: At top level:
    foo.c:2: warning: unused parameter ‘argc’
    foo.c:2: warning: unused parameter ‘argv’

  • wie ich vermutet habe - etwas voellig triviales hatte schuld :D

    if( test <= 0x1F ){ return 0; }
    int forbidden[] = { 0x24,0x26,0x2B,0x2C,0x2F,0x3A,0x3B,0x3D,0x3F,0x40, 0x20,0x22,0x23,0x25,0x3C,0x3E,0x5B,0x5D, 0x60,0x5C,0x5E,0x7B,0x7D,0x7C,0x7E };

    hatte ich - und ich habe die fehlermeldung nicht kapiert (ich dachte ich dürfte keine variablen direkt belegen - dabei war nur gemeint, dass ich als erstes die variablen definieren muss o0)

    aber: wie finde ich die version von meinem gcc heraus?
    und: kennt jemand eine auflistung der bösartigsten unterschiede zwischen java 1.5 und c :)


  • aber: wie finde ich die version von meinem gcc heraus?
    und: kennt jemand eine auflistung der bösartigsten unterschiede zwischen java 1.5 und c :)

    Die version vom gcc hat nicht viel ueber die C-version auszusagen, die es kompiliert. Solange die uni nicht konkrekt vorgibt, dass du C89/90 verwenden muss, kannst es mit gcc -std=c99 *.c kompilieren, da darfst du (endlich zum glueck) die deklaration dort machen wo du sie haben willst.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!