View Full Version : Miglior libro C/C++ 2014
Hybr1d97
12-07-2014, 12:44
Salve ragazzi, ho appena finito il 3° all'ITIS, indirizzo Informatica. Abbiamo fatto giusto le basi di C e C++, quindi in modo basiliare gli array mono-multi dimensionali, i puntatori a variabile, le string, le struct, ordinamento ingenuo e bubblesort, file sequenziali, binari ad eccesso diretto con record (con le differenze quando necessario tra C e C++ per questi argomenti). In più, overloading ed un'introduzione all'OOP per C++. Tutto ciò rappresenta quindi le "basi" di questi due linguaggi, quindi credo di non potermi definire un programmatore proprio alle prime armi.
So che di topic come questi ce ne sono a bizzeffe, ma c'è una confusione assurda su internet ed i casi variano a seconda della conoscenza di chi li apre. Perciò vi chiedo: quali sono secondo voi i migliori libri per iniziare a fare un po' più sul serio (quindi approfondire le basi innanzitutto, per poi in futuro passare alle cose intermedie ed avanzate)? Preferibilmente libri italiani, giusto per eliminare lo sforzo della traduzione, ma con l'inglese non mi faccio tanti problemi, perciò fate pure se necessario.
I migliori sembrano essere i libri di C e C++ dei Deitel e le rispettive "bibbie" di K&R e di Stroustrup (anche in versione italiana). Voi che ne pensate?
vendettaaaaa
12-07-2014, 13:10
Salve ragazzi, ho appena finito il 3° all'ITIS, indirizzo Informatica. Abbiamo fatto giusto le basi di C e C++, quindi l'overloading, gli array mono-multi dimensionali, i puntatori a variabile, le string, le struct, ordinamento ingenuo e bubblesort, file sequenziali, file binari ad accesso diretto (a record), ed un accenno di ricorsione con un'introduzione all'OOP. Tutto ciò rappresenta quindi le "basi" di questi due linguaggi, quindi credo di non potermi definire un programmatore proprio alle prime armi.
So che di topic come questi ce ne sono a bizzeffe, ma c'è una confusione assurda su internet ed i casi variano a seconda della conoscenza di chi li apre. Perciò vi chiedo: quali sono secondo voi i migliori libri per iniziare a fare un po' più sul serio (quindi approfondire le basi innanzitutto, per poi in futuro passare alle cose intermedie ed avanzate)? Preferibilmente libri italiani, giusto per eliminare lo sforzo della traduzione, ma con l'inglese non mi faccio tanti problemi, perciò fate pure se necessario.
I migliori sembrano essere i libri di C e C++ dei Deitel e le rispettive "bibbie" di K&R e di Stroustrup (anche in versione italiana). Voi che ne pensate?
Da conversazioni precedenti è saltato fuori che i Deitel sono moooolto datati per il C++ e molto di quello che insegnano è ormai obsoleto se non una bad practice.
Consiglio: Accelerated C++, ottimo per cominciare a capire molti concetti chiave del linguaggio e le astrazioni che offre. Programming: Principles and Practice Using C++ è molto più completo e come livello di difficoltà è intermedio (lo usa Stroustrup, che lo ha anche scritto, per gli studenti del 1° anno di Computer Science).
C'è anche A Tour of C++, 180 pagine, dev'essere abbastanza facile e da una buona panoramica del linguaggio, ma non l'ho letto e non saprei quanto è difficile.
Hybr1d97
12-07-2014, 13:20
Ma il fatto che i Deitel siano obsoleti è qualcosa che conta nel caso di C++? Insomma, non vorrei dire stupidaggini ma mi sembra sia un linguaggio abbastanza vecchio e che non si aggiorna ogni tot di tempo come invece fa Java
vendettaaaaa
12-07-2014, 13:32
Ma il fatto che i Deitel siano obsoleti è qualcosa che conta nel caso di C++? Insomma, non vorrei dire stupidaggini ma mi sembra sia un linguaggio abbastanza vecchio e che non si aggiorna ogni tot di tempo come invece fa Java
E' proprio qui l'inghippo. Il C++ da anni è in via di standardizzazione. Il primo standard è quello del '98 (C++ 98), poi c'è stato un abbozzo di standard nel 2003, poi negli ultimi anni cambiamenti radicali al linguaggio sono arrivati col C++11, fra poco (tempo di qualche mese) sarà ratificato il C++14 e così via ogni 3 anni. E' un linguaggio rinato, la comunità s'è rinvigorita e lo sviluppo sarà sempre più veloce. Quello che andava bene un tempo ora, col C++11, non va più del tutto bene. I Deitel sono ormai obsoleti.
Hybr1d97
12-07-2014, 13:36
Capito. E per quanto riguarda invece il manuale del C ANSI dei deitel, stessa cosa?
guarda che C++11 non è neanche retrocompatibile con C++03, ci sono vari standard e anche "technical report" per quanto riguarda il C++, idem per C++14 che a quanto pare non sarà 100% retrocompatibile con C++11.
se inizi adesso suggerisco di scegliere C++11 per iniziare, se puoi evita msvc ( il compilatore Microsoft ) e usa llvm ( che puoi usare anche in Visual Studio ) o gcc ( portato su Windows grazie al progetto MinGW ).
il creatore del linguaggio Bjarne Stroustrup scrive testi anche per chi incomincia come il "Programming: Principles and Practice Using C++" arrivato alla seconda edizione e che probabilmente troverai anche tradotto in italiano; va da sé che dovresti preferire testi in inglese, sia perché le traduzioni molto spesso fanno piangere sia perché ogni occasione è buona per censurare ed editare contenuti .
Hybr1d97
12-07-2014, 16:55
C++ l'ho già iniziato a scuola, ora non so quale standard sia, abbiamo fatto le cose basilari quindi non saprei dove stanno le differenze. Inizialmente come IDE usavamo Dev C++, con TDM-GCC 4.7.1 a 64bit. Poi ci hanno consigliato di usare qualcosa di più serio, come CodeBlocks, che monta il GNU GCC.
Comunque, in sostanza, se C++11 non è retrocompatibile e voglio stare "al passo", devo snobbare qualunque libro che non sia aggiornato almeno a questo nuovo standard?
C++ l'ho già iniziato a scuola, ora non so quale standard sia, abbiamo fatto le cose basilari quindi non saprei dove stanno le differenze. Inizialmente come IDE usavamo Dev C++, con TDM-GCC 4.7.1 a 64bit. Poi ci hanno consigliato di usare qualcosa di più serio, come CodeBlocks, che monta il GNU GCC.
Comunque, in sostanza, se C++11 non è retrocompatibile e voglio stare "al passo", devo snobbare qualunque libro che non sia aggiornato almeno a questo nuovo standard?
per conoscere le differenze e saperti orientare devi perderci tempo, imparerai soltanto con l'esperienza.
per iniziare posso dirti che il team di GCC ha già annunciato al tempo del rilascio che la versione 4.8.1 di GCC è la prima ad offrire un supporto completo a C++11, quindi in tutte le versione precedenti il supporto è nullo o parziale, da ritenersi comunque sperimentale per quanto concerne C++11, di conseguenza impara anche a capire quale versione stai usando, che versione della libreria standard, della libreria ABI, della libreria C; devi tenere traccia di tutte le informazioni che ti servono per giudicare la bontà e l'idoneità degli strumenti a tua disposizione.
impara a compilare gcc da sorgenti e fare e disfare tutti i tool che ti servono, tanto è tutto open source, compreso llvm/clang, e ci dovrai spendere del tempo per forza se vuoi imparare.
ci sono vari gruppi su google groups, ci sono le varie mailing list dei vari progetti ( la ML di gcc, di clang, di llvm, etc etc ... ) e siti interessanti come http://stackoverflow.com/ .
tipicamente dovresti dotarti di almeno 2 compilatori diversi, gcc e clang magari, perché così in caso di bug offerti da uno dei 2 potresti scoprire l'errore usando l'altro e viceversa.
considerando che dopo la ratifica dello standard ci vogliono almeno 1-2 anni per assorbire lo standard in pieno ( almeno secondo i trand recenti ), io direi che siccome il C++14 non è neanche stato ancora ufficializzato, è meglio andare con C++11 ( msvc non lo considero in questo discorso per vari motivi, comunque ne sconsiglio vivamente l'uso ) .
Hybr1d97
12-07-2014, 18:57
di conseguenza impara anche a capire quale versione stai usando, che versione della libreria standard, della libreria ABI, della libreria C
Tutte queste cose dove/come posso impararle? Mi sembra di capire che ci voglia un bel po' di studio, e non sono cose che si fanno a scuola.. Praticamente l'unico modo è internet, ma che intendi per "libreria standard/ABI/C", molto sinteticamente? Giusto per sapere cosa cercare.
impara a compilare gcc da sorgenti e fare e disfare tutti i tool che ti servono
Cosa intendi per "compilare gcc da sorgenti"?
Scusa la mia newbaggine, ma ho un'esperienza con C++ di nemmeno un anno e finora mi son sempre occupato della parte riguardante il codice :doh:
Tutte queste cose dove/come posso impararle? Mi sembra di capire che ci voglia un bel po' di studio, e non sono cose che si fanno a scuola.. Praticamente l'unico modo è internet, ma che intendi per "libreria standard/ABI/C", molto sinteticamente? Giusto per sapere cosa cercare.
Cosa intendi per "compilare gcc da sorgenti"?
Scusa la mia newbaggine, ma queste cose non le ho mai studiate (anche perchè abbiamo iniziato a programmare lo scorso Ottobre) :doh:
Significa che ci sono tante variabili in partenza, come il sistema operativo che usi, la sua versione, se il sistema operativo X con la Y libreria standard o con la Z libreria standard, se usi l'X sistema su un dispositivo embedded come un tostapane oppure su un desktop o una macchina più potente. Ci sono talmente tante variabili e varianti che l'unico di imparare e provare, fallire e riprovarci.
Parlando di un sistema GNU/Linux le possibile variazioni sono:
librerie standard per C++ :
- libstdc++ ( da gcc/GNU )
- libc++ ( da llvm )
- altre alternative commerciali ( in realtà più diffuse su sistemi high end, meno sui soliti desktop e dispositivi mobili )
le librerie ABI :
- libsupc++ ( da gcc/GNU )
- libc++abi ( da llvm )
- libcxxrt ( da Pathscale )
le librerie C :
- glibc
- uclibc
- musl libc
- dietlibc
- bison ( da Google per Android )
- altre N varianti, specialmente per sistemi BSD e sistem embedded
questo solo per quanto riguarda i nomi più o meno popolari in ambito UNIX/Linux .
da notare che ci sono variazioni nelle licenze e nella distribuzione, ad esempio il team di GCC distribuisce libc e libstdc++ ( insieme a altre X librerie ) insieme a gcc, quindi quando scarichi l'archivio con i sorgenti di gcc ti ritrovi con tutto quello che ti serve e non troverai le ultime versioni di libstdc++ distribuite in altro modo.
Con llvm invece tutti i progetti sono separati e te li scarichi separatamente .
Con "compilare gcc da sorgenti" intendo quanto detto, ovvero tu vai sul sito del compilatore in questione http://gcc.gnu.org/ , ti scarichi la release che vuoi, configuri i sorgenti e compili e ti ritrovi con l'eseguibile del compilatore "cucinato" da te.
Quest'ultimo passaggio non è esattamente per principianti e conviene che tu perda un po' di tempo con gcc e impari ad usarlo bene prima di buttarti sulla sua compilazione, ma è fattibile una volta che avrai imparato ad usarlo.
QtCreator è una ottima alternativa specialmente per principianti perché è semplice ed essenziale, usa gcc / mingw di default ed è abbastanza aggiornato alle ultime release di gcc / mingw.
Hybr1d97
12-07-2014, 19:28
Significa che ci sono tante variabili in partenza, come il sistema operativo che usi, la sua versione, se il sistema operativo X con la Y libreria standard o con la Z libreria standard, se usi l'X sistema su un dispositivo embedded come un tostapane oppure su un desktop o una macchina più potente. Ci sono talmente tante variabili e varianti che l'unico di imparare e provare, fallire e riprovarci.
Parlando di un sistema GNU/Linux le possibile variazioni sono:
librerie standard per C++ :
- libstdc++ ( da gcc/GNU )
- libc++ ( da llvm )
- altre alternative commerciali ( in realtà più diffuse su sistemi high end, meno sui soliti desktop e dispositivi mobili )
le librerie ABI :
- libsupc++ ( da gcc/GNU )
- libc++abi ( da llvm )
- libcxxrt ( da Pathscale )
le librerie C :
- glibc
- uclibc
- musl libc
- dietlibc
- bison ( da Google per Android )
- altre N varianti, specialmente per sistemi BSD e sistem embedded
questo solo per quanto riguarda i nomi più o meno popolari in ambito UNIX/Linux .
da notare che ci sono variazioni nelle licenze e nella distribuzione, ad esempio il team di GCC distribuisce libc e libstdc++ ( insieme a altre X librerie ) insieme a gcc, quindi quando scarichi l'archivio con i sorgenti di gcc ti ritrovi con tutto quello che ti serve e non troverai le ultime versioni di libstdc++ distribuite in altro modo.
Con llvm invece tutti i progetti sono separati e te li scarichi separatamente .
Con "compilare gcc da sorgenti" intendo quanto detto, ovvero tu vai sul sito del compilatore in questione http://gcc.gnu.org/ , ti scarichi la release che vuoi, configuri i sorgenti e compili e ti ritrovi con l'eseguibile del compilatore "cucinato" da te.
Quest'ultimo passaggio non è esattamente per principianti e conviene che tu perda un po' di tempo con gcc e impari ad usarlo bene prima di buttarti sulla sua compilazione, ma è fattibile una volta che avrai imparato ad usarlo.
QtCreator è una ottima alternativa specialmente per principianti perché è semplice ed essenziale, usa gcc / mingw di default ed è abbastanza aggiornato alle ultime release di gcc / mingw.
Capisco... sarà una faticaccia :D ma mi hai stimolato parecchio la curiosità! Ti ringrazio tantissimo per la pazienza e la disponibilità!
Ma perche' cavolo uno deve compilare GCC, ma se avete problemi di masochismo non andate in giro a coinvolgere gli altri :asd:
Lavoro col C++ da 2 anni tutti i giorni su tutte le piattaforme possibili e non mi e' mai capitato di averne bisogno; usare e/o preoccuparsi di qualsiasi delle STL elencate da freaxxx e' una pessima idea (se uno usa musl e il programma crasha problema suo :D ) e il miglior IDE per C++ e' imo Visual Studio.
IMO, prima di perdere tempo con i peggiori dettagli/difetti del C++, cioe' tutta la complessita' dell'ecosistema di cui parla Freaxx (che purtroppo a un certo punto dovrai almeno conoscere per difenderti) fai meglio a scaricare VS Express, che e' gratis, e giocare con quello.
Onestamente il compilatore lascia un po' a desiderare rispetto a clang e GCC, ma se le parole "user-defined literal" o "lambda capture expressions" non ti dicono niente ti cambia proprio poco.
In compenso non e' orrendo, funziona out of the box e ha il miglior debugger, che e' fondamentale per capire cosa fa il codice che scrivi senza tirare a indovinare.
Ah, Dev C++ e' il male e va estirpato, ormai posto su sto forum solo per sconsigliarlo :asd:
Hybr1d97
12-07-2014, 20:39
Ma perche' cavolo uno deve compilare GCC, ma se avete problemi di masochismo non andate in giro a coinvolgere gli altri :asd:
Lavoro col C++ da 2 anni tutti i giorni su tutte le piattaforme possibili e non mi e' mai capitato di averne bisogno; usare e/o preoccuparsi di qualsiasi delle STL elencate da freaxxx e' una pessima idea (se uno usa musl e il programma crasha problema suo :D ) e il miglior IDE per C++ e' imo Visual Studio.
IMO, prima di perdere tempo con i peggiori dettagli/difetti del C++, cioe' tutta la complessita' dell'ecosistema di cui parla Freaxx (che purtroppo a un certo punto dovrai almeno conoscere per difenderti) fai meglio a scaricare VS Express, che e' gratis, e giocare con quello.
Onestamente il compilatore lascia un po' a desiderare rispetto a clang e GCC, ma se le parole "user-defined literal" o "lambda capture expressions" non ti dicono niente ti cambia proprio poco.
In compenso non e' orrendo, funziona out of the box e ha il miglior debugger, che e' fondamentale per capire cosa fa il codice che scrivi senza tirare a indovinare.
Ah, Dev C++ e' il male e va estirpato, ormai posto su sto forum solo per sconsigliarlo :asd:
Che ne diresti invece di Eclipse? L'ho usato un po' per Java e mi è sembrato ottimo
Ma perche' cavolo uno deve compilare GCC, ma se avete problemi di masochismo non andate in giro a coinvolgere gli altri :asd:
Lavoro col C++ da 2 anni tutti i giorni su tutte le piattaforme possibili e non mi e' mai capitato di averne bisogno; usare e/o preoccuparsi di qualsiasi delle STL elencate da freaxxx e' una pessima idea (se uno usa musl e il programma crasha problema suo :D ) e il miglior IDE per C++ e' imo Visual Studio.
IMO, prima di perdere tempo con i peggiori dettagli/difetti del C++, cioe' tutta la complessita' dell'ecosistema di cui parla Freaxx (che purtroppo a un certo punto dovrai almeno conoscere per difenderti) fai meglio a scaricare VS Express, che e' gratis, e giocare con quello.
Onestamente il compilatore lascia un po' a desiderare rispetto a clang e GCC, ma se le parole "user-defined literal" o "lambda capture expressions" non ti dicono niente ti cambia proprio poco.
In compenso non e' orrendo, funziona out of the box e ha il miglior debugger, che e' fondamentale per capire cosa fa il codice che scrivi senza tirare a indovinare.
Ah, Dev C++ e' il male e va estirpato, ormai posto su sto forum solo per sconsigliarlo :asd:
ma credo che neanche il capo degli ingegneri di IBM conosca tutte queste librerie nel dettaglio, il nostro caro OP ha chiesto una lista di nomi per orientarsi e questo è quanto, solitamente ci si accontenta di conoscerne 1-2 e via .
per quanto riguarda il compilare gcc è una cosa un po' più complessa da come appare, come accennato in gcc ci sono una miriade di librerie distribuite insieme ai sorgenti e quando configuri gcc in realtà puoi configurare direttamente o indirettamente le altre librerie a cascata dato che lo script configure nella root dir chiama ricorsivamente tutte le dovute cartelle e tutti i dovuti sorgenti. Ad esempio se non sai come compilare gcc non saprai neanche come configurare libstdc++ da sorgenti, è tutto interconnesso, in più gcc ha una serie infinita di opzioni, quei sorgenti che scarichi sono validi per fare di tutto, dall'embed al desktop a sistemi senza neanche un OS, a sistemi multithreaded a sistemi a basso consumo. GCC in quanto a features e flessibilità non viene battuto da nessuno al momento, puoi letteralmente portarlo ovunque anche su piattaforme dove al momento non hai neanche un compilatore C per iniziare.
Hybr1d97
12-07-2014, 23:37
Comunque credo che prenderò il C++ Primer, straconsigliato un po' ovunque, è pure aggiornato a C++ 11. Spero di non sbagliare a sceglierlo, anche se molti dicono che non è per principianti... Sono indeciso :doh:
Comunque credo che prenderò il C++ Primer, straconsigliato un po' ovunque, è pure aggiornato a C++ 11. Spero di non sbagliare a sceglierlo, anche se molti dicono che non è per principianti... Sono indeciso :doh:
su
http://www.amazon.it/
http://books.google.com/
a volte puoi leggere qualche pagina a gratisse, molto spesso anche sui siti ufficiali delle varie case editrici ci sono sample gratuiti.
vendettaaaaa
13-07-2014, 09:07
C++11 è retrocompatibile con C++98 eccetera. Nel senso che tutto il vecchio codice compila ancora usando gli ultimi compilatori. La compabilità è stata sempre uno degli obiettivi di Stroustrup e la commissione ISO.
Per cominciare anch'io ti consiglio Visual Studio 2013 Express per due motivi: intellisense (suggerimenti mentre scrivi codice) e debugger.
C++11 è retrocompatibile con C++98 eccetera. Nel senso che tutto il vecchio codice compila ancora usando gli ultimi compilatori. La compabilità è stata sempre uno degli obiettivi di Stroustrup e la commissione ISO.
Per cominciare anch'io ti consiglio Visual Studio 2013 Express per due motivi: intellisense (suggerimenti mentre scrivi codice) e debugger.
anche del codice scritto male "compila", mai sentito parlare di undefined behaviour ?
In generale la compatibilità non è assicurata, questo è quanto, evitiamo frasi come "compila" o "il programma si avvia e funziona" .
Fate anche molta attenzione alle parole, "It doesn't breaks your code" è diverso da "C++11 è retrocompatibile con C++98", non ho mai sentito dire in nessuna conferenza o intervista da parte di nessun esponente della comunità C++ che C++11 è retrocompatibile con C++98, e di fatto non lo è .
Ad oggi il miglior libro per iniziare con C++ è:
The C++ Programming Language (4th Edition)
E' la scelta più sicura che puoi fare
Hybr1d97
13-07-2014, 14:11
Lo Stroustrup dici? Essendo un reference molti lo sconsigliano per iniziare, dicono che può essere complicato per chi programma da poco e che dovrebbe essere usato come difficoltà intermedia dopo aver letto qualcosa di più semplice
Lo Stroustrup dici? Essendo un reference molti lo sconsigliano per iniziare, dicono che può essere complicato per chi programma da poco e che dovrebbe essere usato come difficoltà intermedia dopo aver letto qualcosa di più semplice
Non sono di questa idea. E' un libro che insegna ad usare C++ a chi sa già programmare
Dato che sai già le basi della programmazione, è un libro adatto
http://www.stroustrup.com/4thContents.html dai pure uno sguardo qua e valuta da te
Hybr1d97
13-07-2014, 14:25
Non sono di questa idea. E' un libro che insegna ad usare C++ a chi sa già programmare
Dato che sai già le basi della programmazione, è un libro adatto
Ciò che io mi chiedo è: le basi che io conosco sono sufficienti? Ad esempio non abbiamo fatto i template, i puntatori a funzioni, i <vector> (abbiamo usato solo gli array) e cose così, e ciò può essere un problema?
Nessun problema, sono elementi specifici del linguaggio che il libro insegna ad usare
Dai uno sguardo al link che ho aggiunto al messaggio precedente
vendettaaaaa
13-07-2014, 15:06
Io ho sia TC++PL (4th edition) che Programming: Principles and Practice Using C++. Sconsiglio il primo in quanto insegna ad usare il linguaggio dando per scontato che le basi già ci siano. Dato che hai 16/17 anni, ti consiglio il secondo che spiega tutto bene, per filo e per segno, senza mai dare per scontato niente. Per quanto bravo tu possa essere, meglio non bruciare le tappe. E poi sì, sarai bravo con l'inglese, ma questi libri trattano argomenti complessi, qualche difficoltà potresti averla, quindi tanto meglio un libro meno complicato...
Infine, P:PP contiene anche esempi ed esercizi a fine capitolo, TC++PL è solo reference.
Hybr1d97
13-07-2014, 15:11
Io ho sia TC++PL (4th edition) che Programming: Principles and Practice Using C++. Sconsiglio il primo in quanto insegna ad usare il linguaggio dando per scontato che le basi già ci siano. Dato che hai 16/17 anni, ti consiglio il secondo che spiega tutto bene, per filo e per segno, senza mai dare per scontato niente. Per quanto bravo tu possa essere, meglio non bruciare le tappe. E poi sì, sarai bravo con l'inglese, ma questi libri trattano argomenti complessi, qualche difficoltà potresti averla, quindi tanto meglio un libro meno complicato...
Infine, P:PP contiene anche esempi ed esercizi a fine capitolo, TC++PL è solo reference.
Sì infatti la mia indecisione è proprio tra C++ Primer di Lippman e Principles and Practice Using C++ di Stroustrup. Alcuni dicono che il Primer sia più semplice, altri che lo sia il secondo... poi c'è chi dice P:PP insegni a programmare "ronzando" attorno a C++, che casino :muro:
fai degli esempi di questi undefined behaviour, perché la frase in neretto stroustrup l'ha ripetuta più e più volte.
Cioé tu hai sentito dire dal creatore del linguaggio che C++98 è compatibile con C++11 ? Non ho capito cosa vuoi asserire di preciso .
Come detto ci sono undefined behaviours anche tra C++11 e C++14, basta conoscere la libreria standard, puoi scrivere codice totalmente accettabile in C++11 che genera undefined behaviour in C++14 ( almeno come lo conosciamo oggi e come è descritto nelle ultime bozze ) .
C++11 vs C++03
int j = 42;
j = ++j + 3;
questo esempio è UB in C++03 ma è corretto e accettabile in C++11 grazie alla ridefinizione delle regole riguardo i "sequence points" stesse regole che rendono questo un UB in C++03.
inoltre non credo di dover star qui a fare il listato degli UB o di esempi specifici, i linguaggi sono da ritanersi incompatibili perché lo standard dice questo, non perché qualcuno ti offre un esempio, il motivo per cui dovresti dare priorità allo standard è molto semplice, i compilatori e le varie implementazioni del linguaggio possono sbagliare o "barare", un esempio noto sono le stringhe std::string che né in msvc ( Visual Studio ) né in gcc vengono implementate seguendo lo standard, anzi entrambe le implementazioni sono illegali secondo lo standard C++ ! Ci sono anche mancanze e feature completamente skippate in alcune implementazioni di C++, alcune features non sono neanche presenti in compilatori/librerie standard che si dicono "C++XX compliant" .
Senza contare che in alcuni casi una implementazione di C++ non è neanche tenuta a generare un errore o un semplice warning ed ha semplicemente carta bianca su tutto, quindi se non sai bene cosa dice lo standard sei allegramente fregato .
In sostanza non credo che tu abbia sentito Bjarne dire ciò, è praticamente impossibile, altrimenti ti invito a postare un estratto di ciò che hai sentito o letto, è realmente poco credibile che il creatore del linguaggio abbia potuto dire una cosa del genere.
Hybr1d97
13-07-2014, 19:42
Mi sembra di aver capito che il GCC sia il compilatore più "severo" (dall'affermazione di Tommo riguardo il masochismo), quindi imparando a compilare col GCC si evitano errori che altri compilatori magari lascerebbero passare? Se è così usare il compilatore microsoft non sarebbe male? Anche se, leggendo un po' su internet molti dicono che quest'ultimo sia migliore. A meno che non sia possibile usare GCC con Visual Studio.
Mi sembra di aver capito che il GCC sia il compilatore più "severo" (dall'affermazione di Tommo riguardo il masochismo), quindi imparando a compilare col GCC si evitano errori che altri compilatori magari lascerebbero passare? Se è così usare il compilatore microsoft non sarebbe male? Anche se, leggendo un po' su internet molti dicono che quest'ultimo sia migliore. A meno che non sia possibile usare GCC con Visual Studio.
no, credo che Tommo si riferisse al mio consiglio di imparare come " compilare il compilatore ", e cioé come configurare e compilare gcc a partire dai soli sorgenti.
gcc e clang sono i più " informativi ", termine bruttissimo, ma rende l'idea, ricordati che ogni compilatore ha il suo set di flags anche per errori e warning, alcuni di questi vengono mostrati solo se attivi esplicitamente la relativa flag .
per quanto riguarda gcc e i warnings queste sono le flag http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
clang è più recente di gcc, è un progetto relativamente più giovane ed ha il pregio di essere alquanto " gcc compatibile " quindi anche per l'utente finale è più facile riusare quello che si è imparato usando gcc con clang, molte flag sono in comune.
per quanto riguarda gli errori e la diagnostica, devo dire che clang è un ciccinin superiore ( considerando una comparazione tra l'ultima versione di gcc e l'ultima version di clang disponibile ) e spesso è anche più " friendly " specialmente con i templates, tipicamente la diagnostica di clang è meno criptica di quella generata da gcc .
uno dei problemi pratici con msvc è che non è esattamente un piacere usarlo da riga di comando e che usarlo dalla GUI implica usare una miriade di menu e sub-menu solo per cambiare la configurazione per la compilazione.
dovresti passare ad una distribuzione GNU/Linux o un sistema Unix per facilitarti la vita, altrimenti installati Cygwin / Mingw e usa quello.
Hybr1d97
13-07-2014, 22:34
A questo punto mi tengo Code::Blocks. L'indecisione era tra VS 2013, Eclipse e C::B. Il primo a quanto pare è più indirizzato verso windows (e poi mi sembra di aver capito che non supporta nemmeno pienamente lo standard C99, cosa importante dato che lavoro anche in C), Eclipse è scritto in Java ed è un po' lentuccio oltre che incasinato, mentre C::B è scritto in C++ e sembra avere il supporto nativo a GCC (che poi non ho capito se è proprio GCC, o Mingw o TDM), quindi supporta C++ 11 sia C99. Anche il code completion mi sembra buono, o sbaglio?
vendettaaaaa
13-07-2014, 23:39
A questo punto mi tengo Code::Blocks. L'indecisione era tra VS 2013, Eclipse e C::B. Il primo a quanto pare è più indirizzato verso windows (e poi mi sembra di aver capito che non supporta nemmeno pienamente lo standard C99, cosa importante dato che lavoro anche in C), Eclipse è scritto in Java ed è un po' lentuccio oltre che incasinato, mentre C::B è scritto in C++ e sembra avere il supporto nativo a GCC (che poi non ho capito se è proprio GCC, o Mingw o TDM), quindi supporta C++ 11 sia C99. Anche il code completion mi sembra buono, o sbaglio?
Il code completion di C::B fa pietà in confronto a VS 2013. Ma che diamine, scarica la versione gratuita (Express), non ti costa niente! E sì, il compilatore non è completo, ma vai in 4° liceo... che te ne frega ora come ora?!
Hybr1d97
13-07-2014, 23:45
Ma senza c99 non posso ad esempio dichiarare le variabili nei loop. Possibile che non ci sia una soluzione in vs?
vbextreme
14-07-2014, 09:58
Gcc non esiste per windows! esiste un suo porting! Tdm-mingw già alla versione 4.8.1.
Se si vuole poi solo programmare per ambiente windows allora bisogna usare i tool di windows quali Visual Studio e il suo compilatore.
Mi dispiace ammetterlo ma nessun Ide può essere comparato al VS e nessun compilatore riesce a starci dietro!
E lo dice uno che usa C::B, ma solo perchè sviluppando sia per linux e per windows almeno uso lo stesso compilatore e lo stesso ide in modo da aver meno problemi sul porting.
Hybr1d97
14-07-2014, 12:11
Errore mio, mi sono documentato meglio e sembra che un supporto parziale a C99 ci sia. Comunque ora vs express è in download, lo provo e vi faccio sapere.
UPDATE: Ho verificato, le variabili nei loop in C le fa dichiarare. Comunque è davvero ben fatto, ha anche la spaziatura automatica (ad esempio se scrivo a=b lui corregge da solo in a = b). Ho anche verificato se davvero considera i file *.c come source C ANSI e compilarli come tali, perciò ho creato un nuovo progetto Win32 con VC++, all'interno di esso un file .c e ci ho fatto un overload, e non compila. Quindi non devo andare a modificare niente perchè compili in C, tanto fa già da solo in base all'estensione, giusto?
si può usare vs come ide e mingw come compilatore :confused:
tomminno
14-07-2014, 13:18
Cioé tu hai sentito dire dal creatore del linguaggio che C++98 è compatibile con C++11 ? Non ho capito cosa vuoi asserire di preciso .
Come detto ci sono undefined behaviours anche tra C++11 e C++14, basta conoscere la libreria standard, puoi scrivere codice totalmente accettabile in C++11 che genera undefined behaviour in C++14 ( almeno come lo conosciamo oggi e come è descritto nelle ultime bozze ) .
C++11 vs C++03
int j = 42;
j = ++j + 3;
questo esempio è UB in C++03 ma è corretto e accettabile in C++11 grazie alla ridefinizione delle regole riguardo i "sequence points" stesse regole che rendono questo un UB in C++03.
Il problema ci sarebbe nel caso in cui fosse codice corretto in C++03 e non definito in C++11.
Altrimenti dovresti citare anche:
vector<vector<string>>...
Esempi di codice compilante C++11 e non definiti per il C++14?
Generalmente per compatibilità si intende retrocompatibilità, ovvero codice più vecchio compila secondo il nuovo standard, non che codice nuovo compila sul vecchio...
vbextreme
15-07-2014, 06:58
@Q_Q
si può usare vs come ide e mingw come compilatore
Ma stai scherzando?
Al massimo userai code::block con un compilatore Intel!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.