Compilazione in SO diversi

di il
9 risposte

Compilazione in SO diversi

Ciao ragazzi, qualcuno di voi sa dirmi cosa cambia compilando un sorgente sotto linux o sotto windows?
cioè, esistono delle cose da modificare a prescindere,oppure non si possono fare previsioni precise e ci si adatta ai casi?

9 Risposte

  • Re: Compilazione in SO diversi

    Se usi librerie standard non dovresti avere problemi.

    Ovviamente non puoi usare API di Windows per Linux ...
  • Re: Compilazione in SO diversi

    Perchè uno stesso codice che su Windows funziona su linux va in segmentation fault
    causata ogni volta che vado a mettere le mani su un file
    il programma ne gestisce 3/4, eppure su uno di questi,con le stesse istruzioni che sugli altri vanno tranquille , crasha.
    la cosa incredibile è che ho provato a aprilo e chiuderlo solamente...guardate questo pezzo di codice
    
    main()
    {
       int scelta(void);
       void predisponifile(FILE *);
       void aggiornaregistro(FILE *,int);
       void login(FILE *);
       void registrati(FILE *);
       void logadmin(FILE *);
    
       FILE *registro;
       FILE *maindb;
       FILE *gestiscielenco;
    
       int start,volte;
    
       registro = fopen("registro.txt","r+");
       maindb = fopen("maindb.txt","r+");
       gestiscielenco= fopen("gestiscielenco.txt","r+");
       fscanf(registro,"%d",&volte);
       fclose(registro);
       if (volte == 1)
       {
          predisponifile(maindb);
          aggiornaregistro(registro,volte);
       }
       printf("***Welcome to TONY_BETTER***\n");
       start = scelta();
       while(start != 4)
       {
          switch(start)
          {
             case 1:
                login(maindb);
                break;
             case 2:
                registrati(maindb);
                break;
             case 3:
                logadmin(registro);
                break;
             default:
                break;
          }
          start = scelta();
       }
      fclose(maindb);
       printf("termine esecuzione,grazie per aver scelto TONY_BETTER\n");
       fclose(gestiscielenco);
    
       return 0;
    }
    
    è il main di un programma...all'inizio con fopen assegno gestiscielenco.txt, poi nella scelta che mi viene proposta inserisco 4 (in modo da non entrare in nessuna funzione), mi viene stampato "termine esecuzione..ecc" e poi-....."segmentation fault"
    quindi l'istruzione incriminata è per forza l'ultima! ma non ne ho la minima idea del perche
  • Re: Compilazione in SO diversi

    Apri e chiudi gestisci elenco senza farci nulla?
    Apri tutti i file senza controllare che ciò avvenga realmente.
    A parte il ciclo while "sgraziato" non mi sembra vedere altri errori, sono su un 5"....
    Sarebbe utile il codice completo, compilabile è che ricrei l errore.
    metti anche l int davanti al main, suvvia!
  • Re: Compilazione in SO diversi

    Apro e chiudo quel file senza farci niente perchè con qualsiasi altra istruzione va in segmentation fault! allora per fare una sorta di "debug" ho provato ad aprirlo e chiuderlo solamente , e il problema persiste.....sto impazzendo proprio perchè effettivamente errori non ce ne sono!
    non posso postare tutto il codice per più motivi
    1) sono 400 righe
    2)non è finito
    3) alla fine non serve per risolvere questo particolare problema!in quanto faccio in modo di evitare la chiamata delle altre funzioni
    mi hai fatto venire in mente di controllare se gestiscielenco == NULL dopo l'apertura,grazie,ora provo!
  • Re: Compilazione in SO diversi

    E infatti....la fopen restituisce un puntatore a NULL!
    grazie mille del suggerimento!
    ma questo cosa può significare? non credo di aver esaurito lo spazio nel FCB...il blocco di controllo dei file, cioè l'oggetto puntato da FILE *,giusto?
    come si risolve questo problema?
  • Re: Compilazione in SO diversi

    Il file non esiste e con. "r+" non lo crei è dunque ritorna NULL.
    Quindi controlli che non sia null e in quel caso lo apri con w+, creando il file se non esiste o azzerandolo se già esiste.

    Lavoro su progetti che ogni file contiene ben oltre le 5000 righe di codice, oggi ad esempio ho scritto la 1300 riga di codice di un programma che semplifica la gestione web di un sito, in poche parole una sottospecie di ftp ma su http che verrà mappato come file system virtuale tramite fuse.
  • Re: Compilazione in SO diversi

    Va bene grazie mille del consiglio!

    sisi ma infatti non l'ho voluto postare non perchè tu non fossi in grado di leggerlo,ma per non farti perdere tempo ,anche perchè non è finito e potresti perdere qualche passaggio
    comunque cosa intendi per while "sgraziato"? mi interessa migliorare il mio codice
  • Re: Compilazione in SO diversi

    
    while ( (start = scelta()) != 4 )
    
    naturalmente devi togliere entrambe le linee start=scelta() che hai scritto.
  • Re: Compilazione in SO diversi

    Giusto.....ovviamente
    non mi sono concentrato molto su questi aspetti di "eleganza" perchè sai sto scrivendo questo programma che alla fine è il più corposo che abbia mai scritto, che in pratica gestisce un sistema di scommesse sulle interrogazioni di italiano nella mia classe,hahaha!
    usa una equazione inventata da me per calcolare le quote , e implementa un'area "utente" per inserire le scommesse ,con tanto di account con password cifrata
    e una parte "admin" che ogni volta inserisce i risultati ,aggiorna le quote e la "carta di credito" di ognuno....penso sia un ottimo esercizio di programmazione
Devi accedere o registrarti per scrivere nel forum
9 risposte