Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    Compilatore c++ linux e windows!

    Ciao a tutti! sono uno studente del corso di laurea in informatica all'università di cosenza.
    Volevo chiedervi..dato che sto iniziando ad usare il c++ e anche linux da poco..(per ora uso la distribuzione ubuntu)..qual'è il compilatore che funziona sia su windows che su linux?? dato che passo spesso da un sistema operativo all'altro...grazie!!

  2. #2
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    2,803

    Re: Compilatore c++ linux e windows!

    Originariamente inviato da giupeppe
    Ciao a tutti! sono uno studente del corso di laurea in informatica all'università di cosenza.
    Volevo chiedervi..dato che sto iniziando ad usare il c++ e anche linux da poco..(per ora uso la distribuzione ubuntu)..qual'è il compilatore che funziona sia su windows che su linux?? dato che passo spesso da un sistema operativo all'altro...grazie!!
    vuoi un compilatore per tutti e due?per assurdo anche se esistesse, che te ne faresti?
    cmq se vuoi programmare con windows c'è DevC, su linux non devi installare niente fai tutto da terminale e gcc


    Ps: informatica? scappa finch'è sei in tempo

  3. #3
    gcc (nello specifico g++) esiste sia su Windows che su Linux (ovviamente le due versioni hanno un back-end differente), e il suo porting Windows si chiama MinGW.
    In ogni caso se scrivi in C++ standard qualunque compilatore C++ standard compilerà il tuo codice senza problemi; personalmente quindi ti consiglio di usare g++ su Linux (
    codice:
    sudo apt-get install build-essential
    ) e Visual C++ 2008 Express Edition su Windows, visto che quest'ultimo su Windows fornisce solitamente risultati migliori in termini di ottimizzazioni (senza contare che ti fornisce un ottimo IDE).
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    perchè dovrei scappare?????
    ah un altra cosa..che distribuzione di linux mi consigliate??

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Se vuoi un buon IDE per c/c++ che sia disponibile per entrambi i sistemi, posso consigliarti Code::Blocks, freeware e soprattutto free software

    Per quanto riguarda il Visual C++ di casa Microsoft, sarà pure un ottimo ambienete di sviluppo ma il compilatore segue praticamente uno standard tutto suo... certe volte nel lab dell'università i miei compagni che lo utilizzano si ritrovano con warning ed errori che il gcc di Linux nemmeno si sognerebbe di segnalarti, non perché sia meno efficiente ma perché aderisce allo standard.

    Per la distro di Linux... beh, qui si apre un mondo a parte e non penso che ti consentiranno di parlarne in questo topic (e in questa sezione del forum).

  6. #6
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Originariamente inviato da YuYevon
    Per quanto riguarda il Visual C++ di casa Microsoft, sarà pure un ottimo ambienete di sviluppo ma il compilatore segue praticamente uno standard tutto suo... certe volte nel lab dell'università i miei compagni che lo utilizzano si ritrovano con warning ed errori che il gcc di Linux nemmeno si sognerebbe di segnalarti, non perché sia meno efficiente ma perché aderisce allo standard.
    Per favore, per favore stiamo attenti a cosa diciamo.
    In primis il compilatore Microsoft non ha uno standard tutto suo, ma ha delle estensioni (che puoi benissimo non usare) per ottimizzare la scrittura e altre cose del software. Alcune di queste sono utilissime (il #pragma region per me è quasi fondamentale).
    Warning ed errori bisognerebbe analizzare il caso. Sicuramente i warning sono dovuti alle falle di sicurezza della C Runtime Library e sono semplicemente suggerimenti ad usare la versione sicura delle funzioni (printf_s al posto di printf, ad esempio). Possono essere disabilitati facilmente con un #define.
    Sugli errori anche c'è un discorso a parte. Il gcc per esempio permette l'allocazione dinamica senza usare le funzioni
    codice:
    int n;
    float array[n];
    Che anzi, sarebbe da segnalare come errore (quindi se c'è qualcuno che non rispetta lo standard, è proprio il gcc).
    Anche VisualC non rispetta lo standard, c'è proprio un documento Microsoft che riporta tutte le sue "mancanze" (piccolezze, comunque).

    E comunque gli errori che riporta MinGW certe volte sono esagerati.
    Ti posso fare un semplice esempio che mi è capitato.
    Bla bla bla bla compilo...Error: Multiple definition of NomeDiFunzione.

    30 minuti a cercare la seconda definizione. Niente da fare.
    Stesso codice in Visual C...compilo... Error: Missing ; in void NomeDiFunzione(int,int)
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Beh non ho detto che il gcc sia migliore in assoluto, solo che il visual spesso se ne esce con delle genialate assurde. Mi viene solo un esempio ora (ma ti assicuro che è capitato spesso in passato di errori/warning molto strani).

    Si tratta di un banalissimo esempio di funzione template in c++

    codice:
    #include <iostream>
    using namespace std;
    
    template<class T>
    T max( T p1, T p2 ) {
    
       if ( p1 < p2 ) return p2;
          else return p1;
    }
    
    int main()  {
    
       cout << max<int>(10,20) << endl;
       cout << max<float>(2.6,1.0) << endl;
       
       return 0;
    }
    ebbene il visual c (non ricordo quale versione ma comunque una abbastanza recente) dava un errore sulla seconda cout perché per lui

    max<float>(2.6,1.0)

    è ambigua in quanto la funzione template è chiamata con valori float (come indicato tra parentesi angolari) ma il compilatore interpreta quei valori passati come argomento come double perché non c'è la F! (visto che i valori con la virgola, di default, sono intepretati come double)

    in pratica la scrittura corretta - secondo il visual - doveva essere questa:

    codice:
    cout << max<float>(2.6F, 1.0F) << endl;
    cioè in pratica devi specificare due volte che quei valori sono float e non double... una volta nelle parentesi angolari e un'altra nell'elenco degli argomenti... che bello! (ah, il gcc non segnalava nulla, come penso sia ovvio).

    Comunque vabbè non voglio iniziare ora una "compiler-war", anche perché non è che me ne freghi qualcosa di difendere il gcc o di screditare il compilatore del visual.

    D'altra parte giuseppe ha detto di aver iniziato appena il linguaggio c++, quindi per quello che si troverà a fare immagino proprio che un compilatore valga l'altro...

  8. #8
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Peccato che hai scelto proprio la funzione sbagliata.

    max è una funzione standard contenuta in <algorithm>.
    http://www.cplusplus.com/reference/algorithm/max.html
    Pertanto la cosa più ovvia è segnalare questa ambiguità tra il template scritto da te e quello standard ( che prevede parametri const tra l'altro) e non quello di far finta di niente.

    Meglio provare con:
    codice:
    cout << std::max<float>(2.6,1.0) << endl;
    o cambiare il nome della funzione template per verificare se da ancora errore o no. (Questo è un tipico caso nel quale non specificare il namespace da grattacapi).

    @XWolverineX
    codice:
    int n;
    float array[n];
    Non è un errore. Non nello standard C99 che il gcc implementa. L'errore semmai è che permetta di fare questo compilando codice C++ e non C.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  9. #9
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Originariamente inviato da shodan
    Non è un errore. Non nello standard C99 che il gcc implementa. L'errore semmai è che permetta di fare questo compilando codice C++ e non C.
    Infatti, stiamo parlando proprio di C++
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da shodan
    Peccato che hai scelto proprio la funzione sbagliata.

    max è una funzione standard contenuta in <algorithm>.
    http://www.cplusplus.com/reference/algorithm/max.html
    Pertanto la cosa più ovvia è segnalare questa ambiguità tra il template scritto da te e quello standard ( che prevede parametri const tra l'altro) e non quello di far finta di niente.

    Meglio provare con:
    codice:
    cout << std::max<float>(2.6,1.0) << endl;
    o cambiare il nome della funzione template per verificare se da ancora errore o no. (Questo è un tipico caso nel quale non specificare il namespace da grattacapi).
    No, no scusa, la funzione originaria si chiamava maxi, in effetti non capivo il significato di quella i non sapendo che esiste una funzione max in <algorithm> e l'avevo ridenominata io così...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.