Windows/UNIX Portierungsproblem (gcc Compiler)



  • Ich benutze in Windows DevCPP (gcc v 3.3.1. (mingw special 20030804-1) ) und bekomme folgendes ohne Fehler kompiliert:

    typedef struct{
      int a,b;  
    }test;
    
    test buffer[10];
    
    int main(){
      system("PAUSE");	
      return 0;
    }
    

    Auf UNIX (SunOS, gcc version 3.3.2), bekomm ich beim selben Quellcode die meldung:

    error: variable-size type declared outside of any function

    Seltsamerweise lässt sich aber

    int buffer[10];
    
    int main(){
      system("PAUSE");	
      return 0;
    }
    

    problemlos kompilieren. Muss ich mit struct-Arrays anders umgehen als mit einfachen int,byte oder char Arrays ?
    😕



  • test ist bei dir ne globale variable, wenns n "datentyp" sein soll muss die bezeichnung hinter struct kommen!



  • yusha schrieb:

    problemlos kompilieren. Muss ich mit struct-Arrays anders umgehen als mit mit einfachen int,byte oder char Arrays

    Nein, musst du nicht. Ich hab deinen Code bei mir geteset mit gcc (GCC) 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6) und bei mir wird er kompiliert, ohne Warnungen. Vielleicht hast du mit g++ kompiliert und nicht mit gcc. Wie hast du den Code kompiliert?

    Abgesehen davon, dass du keine headers (stdio.h, stdlib.h usw) includierst, solltest du das system("PASUE"); wegmachen, denn system ist viel zu unsicher, und PAUSE gibt es unter *nices nicht, außer du bastelst dir dein eigenes Skript.



  • Vielleicht hast du mit g++ kompiliert und nicht mit gcc.

    Ist ja eigentlich egal. Das eine linkt ja nur die C++Stdlib hinzu.



  • Der Code, um den es geht, ist viel zu umfangreich, um es hier zu posten. Daher hab ich nur das eigentliche Problem nachgebildet.

    Das folgende frist der compiler (im original kontext , XDT_pdu ist ein struct, BUFFER_SIZE ist in der entsprechenden h - Datei definiert ):

    //Bufferstuff
    XDT_pdu 	pdu_buffer[];
    .
    .
    .
    
    void start_sender(void){
    .
    .
    .
      pdu_buffer[BUFFER_SIZE];
    .
    .
    }
    

    Ich würds halt nur kompakter schreiben wollen 🙂



  • Muss man da eventl. noch:

    struct test buffer[10];
    

    schreiben?

    MfG SideWinder



  • @SideWinder
    Eigentlich nicht, da er ja einen typedef hat.

    @yusha
    Wie supertux schon schreib, ist system("PAUSE") nicht kompatibel (system() schon aber PAUSE nicht). Außerdem ist das eine viel zu aufwendige Art, um einen Tastendruck zu erzwingen oder schießt du gern mit Kanonen auf Spatzen??



  • Hallo,
    nur zur Info ein Link, der ein bisserl auf das Thema eingeht und Beispiele aufzeigt:

    http://examples.oreilly.com/cplus2/ch25.pdf

    Gruss,
    Thomas


Anmelden zum Antworten