Alla scoperta dell’Addin di Visual Studio per Qt
Vediamo in questo articolo altre peculiarità dell’utilizzo di Visual Studio con Qt.
Ti mostro il progetto in un minuto
Spesso comunicare la struttura del proprio progetto in breve tempo è una necessità, Visual studio offre una funzionalità automatica di diagramma molto simile ad UML che permette di visualizzare in maniera interattiva ed intuitiva le varie classi del proprio progetto e le relazione tra di esse.

Per usufruirne basta cliccare sul pulsante View Class Diagram del Solution Explorer, verrà incorporato nel nostro progetto un file ClassDiagram.cd contenente il diagramma di tutte le nostre classi, enumerazioni, etc..

E’ inoltre possibile aggiungere commenti nel diagramma che verrà automaticamente aggiornato mano a mano che si modificherà il codice. Una vera comodità se si è in laboratorio ed in pochi minuti si deve riassumere al prof quello che è stato fatto per ricevere una valutazione o consigli più adeguati. Il diagramma è esportabile come immagine per una fruizione (non interattiva) anche su computer senza Visual Studio installato.
La documentazione è servita
Come Qt Creator anche tramite Visual Studio è possibile usufruire della documentazione tramite il ben noto tasto F1. Tutta la documentazione si integra infatti nel sistema di guida rendendo possibile effettuare ricerche in contemporanea su tutte le guide installate.

Integrazione con Qt Creator
E’ possibile salvare ed aprire progetti nel formato nativo di Qt Creator, i file con estensione .pro. Questo rende possibile lavorare ad un progetto con diversi programmi o rendere fruibile il proprio lavoro da persone che non hanno Visual Studio installato.

L’unica operazione da compiere è scegliere “Create basic .pro File” dal menù Qt, questa funzionalità rende interessante l’utilizzo di Visual Studio anche in quei corsi universitari dove la consegna è tassativamente un progetto redatto in Qt Creator in quanto il prodotto finale è identico.
Utilizzare Qt4 con Visual Studio
Durante la propria carriera università si avrà molto probabilmente a che fare con diverse librerie e diversi framework. Qt è un framework molto diffuso in ambito universitario soprattutto per la sua capacità di girare su molte piattaforme (Linux/X11, Windows, Mac, etc..) ma purtroppo non offre un ambiente di sviluppo evoluto in grado di supportare efficacemente gli studenti nella scrittura dei propri programmi (chi l’ha usato per più di qualche minuto sa bene cosa intendo, errori col passaggio da una versione all’altra, makefile corrotti, directory con spazi talvolta non supportate, associazione dei file di progetto al programma non funzionante, debugger instabile..).
Qt Creator è l’ambiente di sviluppo fornito in serie con Qt ed anche se il programma promette bene è al giorno d’oggi piuttosto povero di funzioni in confronto ad altri ambienti e ancora affetto da diversi bug “di gioventù”. Nel momento in cui sto scrivendo ha raggiunto la versione 1.3.0.
Vediamo quindi come utilizzare Visual Studio come solido sostituto a Qt Creator per scrivere programmi QT.
Prima di tutto verifichiamo di aver installato Visual Studio 2008 Professional o una versione superiore (es. Team System) col relativo Service Pack.
NB: Non è possibile purtroppo utilizzare le versioni express a causa del mancato supporto agli add-in.
Gli studenti che non hanno Visual Studio Professional (o Team System) possono scaricarlo gratuitamente dal sito MSDNAA della propria università.
Scarichiamo ed installiamo Qt4 Visual Studio Add-in 1.1.2 dal sito della Nokia, l’installazione è molto semplice e si riduce a cliccare più volte sul pulsante Next.
Una volta terminata l’installazione scarichiamo ed installiamo la versione di Qt4 compilata per Visual Studio dal sito http://code.google.com/p/qt-msvc-installer.
NB: E’ possibile scaricare i sorgenti dal sito Nokia e compilare sul proprio computer autonomamente Qt4 però è un operazione molto lunga (più di 4 ore su un computer Dual Core a 2 GHz e oltre 4 GB di codice compilato) e richiede una conoscenza profonda del sistema di build utilizzato da Qt per evitare errori. E’ un operazione sconsigliata visto che è disponibile un pacchetto installante di meno di 200 MB (con la possibilità di disinstallarlo), ottimizzato e ripulito per un minor spazio su disco.
La versione di Qt4 compilata per Visual Studio da scaricare è qt-win32-opensource-4.5.2-vs2008.exe per la versione a 32 bit e qt-win64-opensource-4.5.2-vs2008.exe per i sistemi a 64 bit.
L’installazione è anch’essa molto semplice da eseguire, basterà premere su Next qualche volta e il programma si installerà correttamente. Alla fine potremo scegliere di lanciare un programma dimostrativo che mostra le potenzialità di Qt.
Una volta installato Qt troveremo nel menù start la voce Visual Studio 2008 with Qt 4.5.2, clicchiamoci per lanciare Visual Studio 2008. Basterà compiere questa operazione solamente la prima volta, le successive potremo avviare Visual Studio normalmente.
Verrà aperto Visual Studio ma in File/Nuovo Progetto troveremo dei nuovi modelli per creare applicazioni Qt.
Scegliendo Qt Application e confermando la nostra scelta col tasto OK apparirà un wizard che ci permetterà di impostare il nome del progetto e altre impostazioni. Le funzionalità di Visual Studio come l’intellisense e il debugger avanzato sono ora a nostra completa disposizione anche in progetti Qt.
Analizzeremo nel prossimo articolo ulteriori funzionalità di Visual Studio sfruttabili con Qt. Stay tuned!
Imparare l’Assembly con Visual C++
Durante il proprio corso di studi universitario si avrà sicuramente a che fare con l’Assembly o linguaggio macchina in corsi come Fondamenti di Informatica, Calcolatori Elettronici o Architettura degli Elaboratori.
Prima di addentrarci nel mondo dell’Assembly vediamo però cosa non sempre viene detto nei corsi universitari:
A cosa può servire oggi?
-Comprensione più profonda del funzionamento dei calcolatori e dei linguaggi di programmazione
-Scrittura di driver o parti di sistemi operativi
-Ottimizzazione di parti critiche dal punto di vista delle performance di programmi
-Analisi di Dump File
La lista non è completa ma questi sono i principali motivi che spingono ad imparare l’Assembly.
Dal punto di vista accademico la cosa più importante è naturalmente la comprensione del funzionamento dei microprocessori e dei linguaggi di programmazione ed è qui che ci focalizzeremo in questo articolo.
Dal punto di vista reale la scrittura di driver o parti di sistemi operativi è rilegata a piccole nicchie di programmatori mentre l’ottimizzazione di parti critiche di programmi è soprattutto diffusa in applicazioni scientifiche e nel mondo videoludico. E’ necessario sottolineare che solamente in rari casi (ad esempio sostituendo codice C/C++ con istruzioni Assembly SSE4 che il compilatore non è in grado di generare) e in piccole parti di programmi viene utilizzato l’Assembly in quanto difficilmente si migliorano significativamente le prestazioni di un applicativo. Spesso si ottiene proprio l’effetto contrario a causa delle ormai molto complesse pipeline superscalari dei nuovi processori.
Infine l’analisi di Dump File ovvero l’analisi di file contenenti l’immagine della memoria al momento di un crash (causato per esempio da un bug dell’applicazione) è molto rilevante nel supporto tecnico di livello avanzato.
Assembly, Assembler e codice macchina
Chiariamo cos’è l’Assembly, l’Assembler e il codice macchina, spesso confusi anche dai professori più prestigiosi:
- l’Assembly è il linguaggio di programmazione più vicino al linguaggio macchina vero e proprio.
| MOV EAX, 10 MOV EBX, 20 ADD EAX, EBX |
| Esempio di listato Assembly |
La lista di istruzioni Assembly viene costantemente ampliata da Intel, Amd e dagli altri produttori di processori per permettere di sfruttare al massimo ogni nuovo processore.
I manuali ufficiali per i processori Intel sono scaricabili presso http://developer.intel.com/products/processor/manuals/index.htm mentre per i processori Amd è possibile scaricare i manuali da http://developer.amd.com/DOCUMENTATION/GUIDES/Pages/default.aspx#manuals.
- l’Assembler è il programma che converte il linguaggio assembly in codice macchina, per certi versi simile al compilatore. Famosi Assembler sono MASM e TASM. Nel corso di questo articolo ci si avvarrà di Visual C++ e delle sue capacità di mixare codice C/C++ e Assembly.
- il codice macchina o linguaggio macchina è l’insieme di 1 e 0, quasi sempre rappresentati secondo la rappresentazione esadecimale per una migliore leggibilità, che il processore è capace di eseguire. E’ in genere prodotto dall’Assembler.
| B8 0A 00 00 00 BB 14 00 00 00 03 C3 |
| Codice macchina prodotto da MASM per il listato Assembly del precedente esempio |
Come imparare l’Assembly
Se si hanno le basi di C/C++ il modo migliore per perfezionare le proprie conoscenze ed imparare senza perdere tempo l’Assembly è provare direttamente nei propri programmi le istruzioni Assembly anziché imparare nuovi strumenti e creare da zero applicazioni completamente in Assembly.
Dal C/C++ all’Assembly
Vediamo in questo articolo come è possibile visionare il codice Assembly e il codice macchina corrispondente al proprio programma C/C++.
Creiamo un nuovo progetto vuoto (marcando la casella Empty Project durante il wizard) chiamato CppAssembly di tipo Win32 console application e aggiungiamo ora al progetto un file chiamato CppAssembly.cpp contenente il seguente codice:
// In questo esempio viene utilizzato printf
// invece che cout per una maggiore semplicit
// del listato Assembly corrispondente
#include <stdio.h>
void main()
{
int x = 5;
int y = 6;
printf("%d",x+y);
return;
}
Impostiamo in modalità Release il nostro progetto e disabilitiamo le ottimizzazioni andando sul menù Project, scegliendo Properties/Configuration Properties/C/C++/Optimization e impostando la proprietà Optimization a Disabled (/Od) per evitare di includere nel programma compilato istruzioni per ottimizzare le prestazioni ma di intralcio per la lettura e comprensione del listato Assembly.
![]()
Impostiamo adesso un breakpoint sulla prima istruzione (int x = 5;) e premiamo F5 per fermare l’esecuzione nel punto indicato.
Per visualizzare il codice Assembly del nostro programma facciamo click col tasto destro e andiamo su Go To Disassembly come nella seguente immagine:

Apparirà tra il resto il seguente codice Assembly:

Possiamo notare dopo ogni istruzione C/C++ (in nero) il relativo codice Assembly (in grigio) assieme al codice macchina e alla relativa posizione nel programma.
L’istruzione int x = 5 si trasforma (tralasciando la dichiarazione della variabile x presente in un altro punto non mostrato nell’immagine) nel linguaggio Assembly in mov dword ptr [x], 5 che, semplificando, altro non fa che copiare il valore 5 nell’indirizzo di memoria puntato da x.
Il numero in esadecimale 01351006 specifica la posizione iniziale dei byte del codice macchina nel file binario (file .exe) ove il programma è contenuto.
Il codice macchina di questa istruzione è C7 45 F8 05 00 00 00 ed è teoricamente possibile ma del tutto inutile se non in casi molto particolari scrivere manualmente tutto il programma in codice macchina.
Per esempio per codificare manualmente questa istruzione dovremmo andare a pagina 689 dell’Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2A: Instruction Set Reference, A-M e cercare il codice relativo all’istruzione MOV tra un registro e un valore immediato.
| Codice relativo all’istruzione MOV riportato dal manuale Intel |
Oltre a tale codice dovremmo aggiungere il codice del puntatore al registro (definito anch’esso tra i manuali) e il valore immediato. Tutto questo è una fatica spesso inutile dato che la corrispondenza tra codice macchina e linguaggio Assembly è uno ad uno (1:1) quindi non ottimizzabile manualmente, ed è questo il motivo principale per cui sono nati gli Assembler.
Concludendo Visual C++ offre tra i suoi potenti strumenti di Debug la visualizzazione dell’Assembly che si dimostra molto utile nello studio del linguaggio e nella sua comprensione grazie a conoscenze già consolidate di C/C++. Torneremo nel prossimo articolo sulle potenzialità di Visual C++ e vedremo come analizzare i registri della CPU e la memoria.
Installazione passo-passo di Visual C++ Express 2008
Vediamo in questo articolo come installare gratuitamente e senza limiti di tempo, anche per uso lavorativo, Visual C++ Express 2008.
Nota Bene: Per chi non ha a disposizione una linea veloce è consigliabile scaricare da un amico con una linea ADSL o dalla propria facoltà se possibile il DVD installabile off-line a questo indirizzo.
I requisiti minimi sono un sistema operativo Windows XP, Windows Server 2003, Windows Vista o Windows 7 (tutti anche a 64 bit), 192 MB di RAM e 1,3 GB di spazio libero su disco per l’installazione completa.
Chi ha una linea ADSL o ad alta velocità può scaricare direttamente in pochi minuti il programma, vediamo come:
Andiamo all’indirizzo http://www.microsoft.com/express/vc/, individuiamo la sezione Visual C++ 2008 Express Edition, scegliamo la nostra lingua e clicchiamo Download.
In alternativa è possibile scaricare il programma di installazione in italiano direttamente da questo link.
Il programma di installazione è di pochi Megabyte ma sarà necessario essere connessi per scaricare dati aggiuntivi (il programma vero e proprio) durante l’installazione.
Eseguiamo direttamente il file senza salvarlo sul computer
Dopo pochi istanti apparirà il programma di installazione di Visual C++ Express 2008, scegliamo avanti
Dopo aver accettato la licenza di utilizzo ci verranno proposti software aggiuntivi molto utili ma per il momento togliamo le spunte ai vari prodotti facoltativi e clicchiamo su Avanti. Sarà possibile installare tale software quando avremo la necessità effettiva di utilizzarlo.
Nella schermata successiva ci verrà mostrata la dimensione del download che il programma di installazione effettuerà (è necessario essere connessi ad internet) e lo spazio totale che verrà occupato su disco. Clicchiamo Installa per avviare l’installazione.
L’installazione durerà qualche minuto (in base alla velocità della linea e alla velocità del disco fisso)
Una volta completata vi verrà richiesto di registrare gratuitamente il prodotto entro 30 giorni, la registrazione è facile e veloce, vediamo come effettuarla.
Apriamo il programma appena installato dal menù Start
Apparirà una finestra per informarci che l’ambiente di sviluppo è in fase di preparazione, questa finestra apparirà solamente la prima volta dopodiché l’avvio sarà molto rapido (in genere qualche secondo)
Dopo qualche istante apparirà Visual C++ 2008 Express, andiamo sul menù “?” e scegliamo “Registra il prodotto”.
Clicchiamo su “Effettuare adesso la registrazione” per ottenere il codice da inserire nella casella di testo sottostante.
La registrazione si concretizza nel rispondere ad alcune domande online e inserire le proprie generalità. Richiede un account MSN Hotmail, MSN Messenger o Passport, se non ne avete uno lo potete creare gratuitamente cliccando su Registra.
Dopo aver inserito il codice e cliccato su Completa la registrazione nella finestra precedente siamo pronti per lavorare senza limiti di tempo con Visual C++ 2008 Express.
Dev-C++ o Visual C++ Express, quale usare?
Spesso il primo programma che si impara in ambito accademico per scrivere codice C/C++ è Dev-C++ ma non è detto che sia sempre il più adatto. Vediamo brevemente cosa cambia da Visual C++ e quali sono i vantaggi e gli svantaggi di entrambi.
![]()
Dev-C++ è un ambiente leggero pensato per creare piccoli programmi, ha come punto di forza pochi comandi e per questo è molto facile da apprendere ma è purtroppo abbandonato (non più sviluppato) dal 2005.
L’abbondono del programma si traduce in una serie di bug più o meno fastidiosi, il più vistoso che si può incontrare è relativo al Debug (controllo) della proprio codice. Non è detto inoltre che in futuro “giri” su nuovi sistemi operativi.
Scegliendo Debug dal menù Debug verrà infatti chiesto di abilitare in automatico l’aggiunta di speciali informazioni necessarie per il debug del proprio programma.
![]()
Purtroppo rispondendo Yes non verranno automaticamente aggiunte ed eseguire il debug richiederà la modifica manuale delle corrette impostazioni.
Un vantaggio indubbio di Dev-C++ in progetti monofile è la possibilità di compilare sorgenti senza creare a priori un progetto, a differenza di Visual C++ che richiede la creazione (seppur guidata) di una soluzione prima di poter compilare.
Questa scelta è riconducibile sia alla ricchezza di opzioni che Visual C++ offre per la compilazione sia al target di utenti che lo usano professionalmente in progetti composti in genere da diversi file per una migliore organizzazione di logiche complesse.
Ricapitolando:
Dev-C++
| Punti di forza | Svantaggi |
| Molto leggero | Poche funzionalità |
| Facile da imparare | E’ utilizzato solamente nel mondo accademico, raramente nel mondo del lavoro |
| E’ possibile compilare i file sorgenti senza dover creare un progetto | Non è più sviluppato dal 2005, alcuni bug sono presenti da anni |
| Gratutito anche per uso commerciale | E’ più difficile controllare se i propri programmi funzionano correttamente (scarne e/o incomplete funzionalità di Debug ) |
Visual C++ Express
| Punti di forza | Svantaggi |
| Estremamente ricco di opzioni | La padronanza completa dell’ambiente non è immediata come Dev-C++ per via delle numerose possibilità offerte. |
| Usato nel mondo del lavoro, costituisce un elemento preferenziale in molti casi di un curriculum | Bisogna creare una progetto per compilare un file sorgente, poco indicato per compilare progetti monofile |
| Debug ricco e semplice | |
| Include una ampia documentazione contente esempi di comandi | |
| Gratutito anche per uso commerciale |
In conclusione per uno studente la pecca peggiore è la scarna esperienza di debug che Dev-C++ offre, non ricca come in Visual C++. Per progetti di esame non banali è consigliabile scrivere e debuggare il proprio codice con Visual C++ mentre per programmi di poche righe e di un solo file Dev-C++ risulta senza dubbio la scelta migliore. E’ comunque possibile installare entrambi contemporaneamente.
Programma adesso fermati! Ti devo controllare
Dopo aver provato ad eseguire riga per riga il nostro codice ci saremmo sicuramente detti: Forte! Adesso posso capirci qualcosa ma se volessi fermare l’esecuzione del programma alla riga N per controllare ad esempio i valori delle variabili interne dovrei premere N volte F11?
In Visual C++ è possibile impostare dei punti di arresto al programma chiamati BreakPoint (letteralmente significa punti di interruzione) che permettono per l’appunto di bloccare l’esecuzione del programma.
Per impostare un breakpoint, continuando col codice del precedente articolo, dobbiamo posizionarci sulla riga desiderata e premere F9 o alternativamente cliccare col tasto sinistro del mouse sul margine a sinistra della riga di codice. Apparirà un pallino rosso per confermarci che il punto di interruzione è stato impostato. Per rimuovere il breakpoint dobbiamo semplicemente ripetere l’operazione, ripremere F9 nella solita riga o cliccare sul puntino rosso.
E’ possibile in ogni caso mettere o togliere i breakpoint tramite il menù Debug/Imposta/Rimuovi punto di interruzione.
Adesso che abbiamo indicato a Visual C++ dove fermare il nostro programma premiamo F5 o andiamo sul menù Debug/Avvia Debug per eseguirlo.
Inseriamo le varie dimensioni del vettore che ci verranno richieste (nelle immagini è stato inserito 2, 3, 2) e il programma si fermerà automaticamente al calcolo del modulo.
Adesso possiamo analizzare le nostre variabili dalla finestra Auto ancorata in basso ma possiamo fare ancora di più.
NB: Eseguendo il programma senza Debug (Ctrl+F5) il programma non si fermerà ma sarà eseguito normalmente.
Per controllare espressioni più complesse del semplice valore di una variabile come ad esempio il risultato del calcolo intermedio (z*z) possiamo selezionare la corrispondente istruzione nel codice durante il Debug e apparirà in sovraimpressione il risultato da noi richiesto.
Se però vogliamo avere sottocchio più espressioni o laddove selezionare istruzioni direttamente nel codice può risultare impossibile c’è qualcosa di più comodo, la finestra Espressione di controllo.
La finestra Espressione di controllo, come la finestra Auto, si trova nella parte inferiore della schermata e inizialmente risulta essere vuota. Dobbiamo infatti dirgli cosa visualizzare.
Possiamo inserire le espressioni che vogliamo analizzare nella colonna Nome, verranno istantaneamente valutate e il loro risultato apparirà nella colonna Valore.
Possiamo in questo modo avere sott’occhio tutto quello che vogliamo per un controllo totale del nostro programma. Addio cari vecchi bug!
Come capire quello che si sta facendo
Uno degli strumenti principali per comprendere un linguaggio di programmazione è osservare il comportamento del proprio codice passo passo, istruzione per istruzione e cercare di individuare quali conseguenze comporta ogni istruzione.
Scriviamo un semplice programma che ci permetta allo stesso tempo di sfruttare le nozioni apprese nel corso di Geometria e che calcoli il modulo di un vettore in tre dimensioni.
Il modulo di un vettore è uno scalare che è dato dalla radice quadrata delle somme delle componenti al quadrato del vettore.
Indicando con x, y e z le componenti dei vettori in tre dimensioni il modulo sarà dato da: √(x² + y² + z²)
Per effettuare il nostro calcolo avremo bisogno della funzione radice quadrata sqrt in C/C++, inclusa nella libreria di funzioni matematiche <math.h>.
Il nome della funzione sqrt non è stato scelto a caso dai creatori della libreria ma è una “sigla” che richiama la parola radice quadrata ovvero Square Root nella lingua anglosassone.
NB: includendo la libreria <math.h> nel codice sorgente e compilando il programma (Ctrl+Maiusc+B) l’Intellisense sarà aggiornato automaticamente con le nuove funzioni che saranno presentate nel menù.
Creiamo un nuovo progetto console Win32 vuoto, aggiungiamo un file di C/C++ come abbiamo visto nel dettaglio nello scorso post e inseriamo il seguente codice:
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
cout << "Inserisci le dimensioni del vettore:" << endl;
double x, y, z, modulo;
cin >> x;
cin >> y;
cin >> z;
modulo = sqrt((x*x) + (y*y) + (z*z));
cout << "Modulo del vettore: " << modulo << endl;
return 0;
}
Questo piccolo programma chiederà all’utente le tre componenti di un vettore in tre dimensioni tramite la funzione cin e stamperà a video il modulo.
Inserendo ad esempio 2, 3 e 2 il programma calcolerà il modulo restituendo 4.12311 ovvero √(2² + 3² + 2²) = √17 = 4.12311.
Durante l’inserimento dei dati bisognerà premere invio prima di inserire il dato successivo.
Il programma sembra funzionare ma per capire bene cosa fa eseguiamo istruzione per istruzione il nostro codice attraverso il menù Debug/Esegui istruzione (F11).
Apparirà una piccola freccia gialla a sinistra del codice per indicare l’istruzione successiva che verrà eseguita. Per eseguire un istruzione premiamo F11, la freccia si sposterà alla riga successiva.
Notiamo sui pannelli inferiori di Visual Studio la finestra Auto, questa finestra mostrerà automaticamente i valori e i tipi delle variabili coinvolte nell’istruzione attuale o che comunque ci potrebbero servire per comprendere meglio il nostro codice.
Premiamo F11 per eseguire passo-passo il nostro programma fino ad arrivare alla riga “cin >> x” e notiamo che nella finestra del nostro programma è stato effettivamente stampata la stringa “Inserisci le dimensioni del vettore” nelle istruzioni precedenti.
Riflettiamo un attimo sui valori che sono apparsi però nella finestra Auto concentrandoci sulle variabili modulo, x, y e z.
Abbiamo dichiarato queste variabili come double ovvero come numeri decimali ma non abbiamo specificato un valore iniziale, come mai invece la finestra Auto dice che valgono -9.2559631349317831e+061?
La risposta è semplice, nel C/C++ le variabili senza alcun valore preventivamente assegnato contengono un dato praticamente “casuale” dipendente dalla memoria assegnata alle variabili stesse.
NB: Dobbiamo stare molto attenti a questo dettaglio che spesso è causa di subdoli bug.
Ma perché se le variabili non inizializzate contengono un valore casuale hanno tutte lo stesso valore? E’ solo fortuna?
La risposta in questo caso è meno intuitiva e dipende dalla speciale modalità in cui stiamo eseguendo il programma, chiamata Debug.
Questa modalità facilita la ricerca di errori e per far questo Visual C++ assegna automaticamente alle variabili non inizializzate un valore arbitrario che gli servirà per segnalare eventuali problemi causati dall’utilizzo di variabili non inizializzate.
Modificando ad esempio il programma in modo da eseguire l’istruzione “x = y + 1;” subito dopo la dichiarazione “double x, y, z, modulo;” riceveremo un avviso che ci avverte che stiamo facendo qualcosa che non è corretto seppur sintatticamente valido. La variabile y infatti non avendo ancora un valore definito esplicitamente dal programma può contenere un qualsiasi numero e incrementare di 1 un valore che non conosciamo è un operazione non corretta. Perché se non conosciamo il valore vogliamo incrementarlo?
E’ possibile compilare ed eseguire il programma in modalità Release (normale) ovvero senza controlli da parte di Visual C++ su possibili operazioni non corrette scegliendo la corrispondente voce nel menù a tendina in alto prima di lanciare il programma all’interno di Visual C++, lanciare passo-passo il programma equivale ad eseguirlo.
Eseguendo il programma in modalità Release noteremo che i valori assegnati alle variabili non inizializzate sono estremamente casuali.
Continuando l’esecuzione tramite il tasto F11 scomparirà la piccola freccia gialla momentaneamente e il nostro programma console passerà in primo piano nascondendo il codice. L’esecuzione della funzione cin è infatti “bloccante” e ferma il programma fintanto che un utente non preme invio (o termina la “riga” in qualche altro modo). Inseriamo quindi il valore 2 nel nostro programma e premiamo invio, la finestra del codice tornerà in primo piano e la finestra Auto mostrerà il valore della variabile x in rosso per evidenziare che l’istruzione precedente ha modificato tale valore.
In logiche complesse l’esecuzione passo-passo ci permetterà di capire con più facilità il comportamento del programma, soprattutto se scritto da altri.
Il vantaggio principale per uno studente rimane comunque la possibilità di capire cosa fa effettivamente ogni singola istruzione ed anche come lavora il C/C++. Senza questa modalità difficilmente ci saremmo accorti senza saperlo a priori, che il linguaggio C/++ assegna un valore casuale alle variabili non inizializzate.
Alla scoperta dell’Intellisense
Durante l’apprendimento di un nuovo linguaggio come il C e il C++ una delle difficoltà iniziali è proprio capire come si fa a programmare una determinata azione.
Trovarsi davanti al computer una pagina bianca sicuramente non aiuta, quello che invece servirebbe sarebbe una lista di comandi da cui poter scegliere quello che più si addice al nostro obbiettivo.
Vediamo come far comparire la lista di comandi (funzioni) del C/C++ con Visual C++, un programma che ci permetterà di studiare in profondità il C e il C++.
Dopo aver installato Visual Studio 2008 o Visual C++ 2008 Express, un programma gratuitamente scaricabile, e aperto il programma ci verrà presentata una finestra in cui appariranno i nostri ultimi progetti per una rapida apertura.
Iniziamo creando un nuovo progetto che sarà il nostro nuovo programma. Andiamo su File/Nuovo/Progetto
Apparirà una finestra che permette di creare nuovi progetti o progetti “preconfezionati”. Scegliamo un nuovo progetto console (ovvero un programma a linea di comando) impostando Visual C++ come tipo di progetto e Progetto console Win32 come modello. Diamo infine un nome al nostro progetto e clicchiamo OK.
Dopo aver cliccato su OK ci verranno chieste alcune informazioni, clicchiamo Avanti e scegliamo applicazione console, mettiamo la spunta a Progetto vuoto e clicchiamo su Fine.
Adesso aggiungiamo un nuovo file al nostro progetto (che come abbiamo specificato è vuoto), andiamo sul menù Progetto/Aggiungi nuovo elemento… e scegliamo dai modelli File di C++ (.cpp), assegniamo al file un nuovo nome e clicchiamo su Aggiungi.
NB: Possiamo scrivere codice C o C++ e non solamente C++
Ci ritroveremo adesso una pagina bianca dove scrivere il codice per creare il nostro programma.
Fino al momento non sembrerebbe molto diverso rispetto a qualsiasi editor di testi ma una volta scritte le intestazioni inziali del nostro programma, possiamo posizionarci nel corpo (all’interno delle parentesi graffe) della funzione main e premere Ctrl+Barra spaziatrice per visualizzare un menù chiamato Intellisense con le funzioni C/C++ da inserire nel nostro programma.
La scrittura di codice risulta molto più veloce ed anche la lettura ne risulta più rapida grazie alla colorazione automatica delle parole chiave del linguaggio, ma l’importante è che adesso sappiamo che comandi possiamo inserire nel nostro programma.
Vediamo adesso come compilare ed eseguire il nostro programma, cancelliamo il codice eventualmente scritto e inseriamo il seguente:
#include <iostream>
using namespace std;
int main()
{
cout << "Ciao C/C++!";
return 0;
}
Per compilare, lanciare e “fermare” il programma una volta terminato per poterne leggere l’output (le scritte che eventualmente emette) premiamo Ctrl+F5 o andiamo sul menù Debug/Avvia senza eseguire Debug.
Non dovremmo più occuparci di inserire codice ad-hoc o comandi come system(“pause”) per fermare il programma al suo termine, verrà automaticamente inserito il messaggio Premere un tasto per continuare.. e alla pressione di un tasto il programma sarà terminato.
Possiamo, adesso che sappiamo come visualizzare i comandi e lanciare il nostro programma, provare a utilizzare le funzioni che ci sembrano utili per sottoporre alla nostra volontà il nostro programma.
Capire il C/C++
Uno degli scogli iniziali per uno studente di un Istituto Tecnico o di un corso di studi Universitario come Informatica o Ingegneria è molto spesso imparare a programmare con un nuovo linguaggio come il C o il C++ per superare esami come Fondamenti di Informatica, Algoritmi e strutture dati e Programmazione ad oggetti.
Il detto se ascolto dimentico, se vedo ricordo, se faccio capisco si applica molto bene, in special modo agli inizi, ad una disciplina come la programmazione.
Le nuove riforme universitarie purtroppo riducono la durata dei corsi anno dopo anno e nella economia universitaria rimane tagliato fuori proprio l’insegnamento degli strumenti con cui uno studente può approfondire anche a casa propria certi meccanismi della programmazione.
Vedremo in una serie di articoli proprio quali sono questi strumenti e come utilizzarli al fine di comprendere in profondità il C e il C++ e passare con 30 e lode anche gli esami più ardui.