Ho sfogliato solo le prime 10 pagine della dispensa del corso di programmazione a Roma1 e ho trovato un sacco di errori o inesattezze. Personalmente la sconsiglio vivamente. Il migliore manuale gratuito sul C++ presente in rete è secondo me Thinking C++ di Bruce Eckel (al momento non riesco ad aprire la pagina personale di Eckel ma si trovano diverse versioni in rete cercando su Google). Consiglio poi la lettura delle seguenti pagine sul forum di IoProgrammo (una rivista di informatica italiana):
*
Come imparare il C++
*
Link utili - risorse per tutti! (C++)
EDIT: Come richiesto inserisco i commenti alla prima delle due dispense postate precedentemente. Non ho niente contro il professor Marfurt che l'ha scritta, anche perché non so assolutamente niente di lui, ma è l'occasione di criticare molti dei difetti che ho avuto modo di vedere in molti corsi universitari sul C++ (principalmente aiutando i loro studenti in diversi forum).
Partirei prima di tutto da pagina 2 (l'enfasi è stata aggiunta da me)
3. Quale compilatore usare:
I programmi riportati in queste dispense sono stati scritti pensando di usare il compilatore Dev-C++ che è installato nel Laboratorio di Calcolo del nostro Dipartimento, ma che può essere prelevato liberamente in rete ed installato facilmente su qualsiasi PC anche a casa vostra (cosa che caldamente vi raccomando di fare). Nel caso vogliate usare un altro compilatore potrebbe essere necessario apportare ai programmi qualche piccola modifica.
Questo piccolo paragrafo pregiudica a mio avviso tutto il manuale (e non è ancora neanche iniziato!). Significa principalmente che chiunque non sia in grado di installare sul proprio PC Dev-C++ (chiunque abbia Windows Vista, Windows 7 o qualsiasi versione di Linux o Mac) è costretto a fare delle modifiche al codice presente nel libro. Codice del quale non capisce nulla e al quale non è ovviamente in grado di mettere mano in modo autonomo. Questo povero studente sarebbe quindi costretto o a chiedere su di un forum o a fare le esercitazioni sempre e solo nel laboratorio del dipartimento. Scrivere un codice portabile su tutti i sistemi non sarebbe stato complicato e la quantità del codice del tutto equivalente. Sembra quindi più che altro una decisione dettata da pigrizia o addirittura ignoranza che di certo non giova agli studenti.
A questo punto vediamo gli errori e le imprecisazioni. Per prima cosa in C++ (e in C a partire dallo standard del 1999) una funzione deve scrivere esplicitamente il valore di ritorno e non esiste più il valore di ritorno di default uguale a int. Si tratta in questo caso di ignoranza, perché il professore scrive in seguito:
E infatti la funzione main() è di tipo int, soltanto che il tipo può, in questo caso particolare, essere omesso; tuttavia, se provate a modificare tutti i programmi che abbiamo scritto fino ad adesso sostituendo main() con int main() vedrete che tutto funzionerà perfettamente allo stesso modo.
Sfortunatamente questa frase, seppur errata, che avrebbe permesso a coloro con compilatori meno permissivi di modificare correttamente il proprio programma, è a pagina 53.
Istruzione 5: system ("PAUSE"); Questa istruzione serve a fissare lo schermo nella situazione attuale in modo che noi possiamo leggervi il risultato.
Questa frase ha uno sfondo di verità, su Windows mette in pausa l'esecuzione del programma. Il problema del suo uso qui è però duplice. Prima di tutto sta usando questa funzione solo per ovviare ad un limite di Dev-C++ (altri IDE sono perfettamente in grado di mantenere aperta la finestra anche dopo l'esecuzione del programma e se si fa partire il programma direttamente da console il problema neanche si pone). Inoltre, la funzione system sospende l'esecuzione del programma corrente per far partire il comando che gli viene passato per argomento. È una funziona complicatissima e non portabile per fare qualcosa che si può semplicemente implementare con un printf e uno scanf (oppure con cout e cin)...
Il manuale si ostina poi ad insegnare sia printf/scanf che cout/cin. Considerando che fanno le stesse cose mi sembra una decisione molto discutibile. Soprattutto considerando che viene prima insegnata la coppia printf/scanf il cui comportamento è a volte a dir poco criptico. Sfortunatamente vengono spesso insegnate in modo incredibilmente superficiale nonostante l'incredibile numero di pagine dedicate. Perché passare 4-5 pagine a spiegare qualcosa per poi mostrare un'alternativa molto più facile e idiot proof? Non esiste alcun motivo per cui un programmatore C++ debba conoscere questa libreria del C.
Passiamo ora alla terza riga:
#include <stdio.h>
anche questa riga non fa parte propriamente del programma C++; essa è una direttiva che avverte il compilatore che una o più istruzioni che compariranno in seguito, si possono trovare nel file stdio.h, e i simboli < e > servono ad
indicare che questo particolare file si trova nella Libreria Standard.
Non è del tutto esatto. L'uso di <> o "" determina l'insieme delle cartelle nel quale cercare gli header. Cartelle che possono essere spesso modificate negli IDE o passando istruzioni al compilatore. <> si usa di solito per indicare librerie esterne al programma corrente, mentre "" vengono usate per librerie interne.
Istruzione 6: return 0; Questa istruzione serve a terminare il programma e a restituire il controllo al sistema operativo del computer.
È vero ma l'inserimento di tale istruzione in C++ è facoltativa alla fine del main.
Ci sono poi altre cose che ho visto in giro (ma che dovrei mettermi a cercare), ma sta già diventando lungo e quindi mi fermo.
Ultima modifica di
apatriarca il 30/10/2010, 13:02, modificato 1 volta in totale.