1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Arraydefinition unter C (ISO C90)

  • lmeyer
  • 15. März 2007 um 14:44
  • Unerledigt
  • lmeyer
    3
    lmeyer
    Mitglied
    Reaktionen
    1
    Punkte
    56
    Beiträge
    9
    • 15. März 2007 um 14:44
    • #1

    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

  • zwutschkerl
    6
    zwutschkerl
    Mitglied
    Punkte
    365
    Beiträge
    71
    • 15. März 2007 um 15:51
    • #2

    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 };
  • lmeyer
    3
    lmeyer
    Mitglied
    Reaktionen
    1
    Punkte
    56
    Beiträge
    9
    • 15. März 2007 um 15:53
    • #3

    so kreativ war ich auch schon :winking_face:

    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 = { ...};

  • djmaecki
    8
    djmaecki
    Mitglied
    Reaktionen
    1
    Punkte
    616
    Beiträge
    119
    • 15. März 2007 um 16:04
    • #4

    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’

  • lmeyer
    3
    lmeyer
    Mitglied
    Reaktionen
    1
    Punkte
    56
    Beiträge
    9
    • 15. März 2007 um 16:11
    • #5

    wie ich vermutet habe - etwas voellig triviales hatte schuld :grinning_squinting_face:

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

  • djmaecki
    8
    djmaecki
    Mitglied
    Reaktionen
    1
    Punkte
    616
    Beiträge
    119
    • 15. März 2007 um 16:18
    • #6

    OK, du hast es mittlerweile eh selber rausgefunden.

    Version bekommt man mittels "gcc --version".

  • MaxAuthority
    17
    MaxAuthority
    Gewinner des Desktop-Contest 2002
    Reaktionen
    5
    Punkte
    3.165
    Beiträge
    626
    • 15. März 2007 um 17:50
    • #7
    Zitat von lmeyer


    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.

    http://vimperator.org - Make Firefox behave like Vim

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung