SlideShare a Scribd company logo
1 of 19
Download to read offline
Compendio sottoinsieme
del C++ a comune col C
(Libreria standard, Input/Output,
Costanti, Dichiarazioni e typedef,
       Memoria Dinamica)
Librerie 1/2

• Il solo insieme di istruzioni di un linguaggio di
  programmazione come il C/C++ è sufficiente a
  scrivere un qualsiasi programma in grado per lo
  meno di interagire con l'utente?
      – Decisamente no
• Gli oggetti cin e cout erano oggetti predefinti del
  linguaggio?




Programmazione I - Paolo Valente, 2008/2009             2
Librerie 2/2

• No, sono oggetti appartenenti ad una libreria
• Una libreria è una raccolta di funzioni ed oggetti
  che permettono di effettuare determinati insiemi di
  operazioni
      – Esistono ad esempio librerie per l'ingresso/uscita,
        librerie matematiche e così via




Programmazione I - Paolo Valente, 2008/2009                   3
Libreria standard 1/2
• Sia nel linguaggio C che nel linguaggio C++ è
  prevista la disponibilità di una libreria standard
• La libreria standard del C++ è più o meno un
  sovrainsieme di quella del C

• Sia la libreria standard del C che quella del C++ sono
  costituite da molti moduli, ciascuno dei quali è
  praticamente una libreria a se stante, che fornisce
  funzioni ed oggetti per un determinato scopo

• Per utilizzare ciascun modulo è tipicamente
  necessario includere un ben determinato header file

Programmazione I - Paolo Valente, 2008/2009                4
Libreria standard 2/2
• Alcuni moduli di base della libreria standard sono ad
  esempio:

    Libreria                                  Header C   Header C++

    Matematica                                math.h     cmath
    Ingresso/Uscita                           stdio.h    iostream
    Limiti numerici                           limits.h   limits




Programmazione I - Paolo Valente, 2008/2009                           5
Uso dei moduli comuni tra C e C++
• Per utilizzare i moduli della libreria standard C++ a
  comune col C è bene includere degli header file il cui
  nome si ottiene, a partire dal nome del corrispondente
  header file per il C, eliminando il suffisso .h ed
  aggiungendo una c all'inizio del nome
      – Es.: la libreria matematica è presentata nell'header file
        math.h in C, mentre in C++ è presentata nell'header file
        cmath
      – Volendo, anche in C++ si possono includere gli header file
        originali, ma è una pratica sconsigliata
• Nel caso del C++, i nomi delle funzioni e degli oggetti di
  queste librerie sono definiti nello spazio dei nomi std
• In pratica, per usarli, bisogna aggiungere sempre la
  direttiva:
  using namespace std ;
Programmazione I - Paolo Valente, 2008/2009                          6
Input/Output formattato in C
• Diversamente dal C++, in C l'Input/Output
  formattato è realizzato mediante funzioni di
  libreria presentate in <stdio.h>
      – <cstdio> se volete utilizzare tali funzioni in C++
• Tra le funzioni principali:
      – printf: output formattato su stdout
      – scanf: input formattato da stdin




Programmazione I - Paolo Valente, 2008/2009                  7
printf
void printf(const char format[], ... ) ;

                                                       Lista valori da stampare
• La stringa format può contenere due tipi di
  oggetti:
      – Caratteri ordinari (incluso quelli speciali), copiati sullo
        stdout
      – Specifiche di conversione, che controllano la traduzione
        in caratteri del valore dei successivi argomenti
            o Una per ogni successivo valore da stampare




Programmazione I - Paolo Valente, 2008/2009                                   8
printf
• Esempio:
  int a = 15; double b = 16.5 ;
  printf(“Il valore di a è %d, quello di b è %gn”, a, b) ;

• Equivale a
  cout<<”Il valore di a è “<<a<<”, quello di b è “<<b<<endl;

• Si sono utilizzate due delle seguenti specifiche di
  conversione:
    – %d             Numero intero, stampare in notazione decimale
    – %g             Numero reale, stampare in notazione decimale
    – %c             Carattere, tipicamente codifica ASCII
    – %s             Stringa, tipicamente codifica ASCII

Programmazione I - Paolo Valente, 2008/2009                          9
scanf
void scanf(const char format[], &<nome_variabile>) ;

                                                  Variabile da modificare
• La stringa format può contenere solo specifiche
  di conversione
      – Supponiamo solo una
      – Controlla l'interpretazione da dare ai caratteri letti da
        stdin per determinare il valore da memorizzare nella
        variabile passata come secondo argomento




Programmazione I - Paolo Valente, 2008/2009                                 10
scanf
• Esempio:
  int a ;
  scanf(“%d”, &a) ; // equivale a cin>>a ;

• Si è utilizzata una delle seguenti specifiche di
  conversione:
    – %d             Numero intero, in notazione decimale,
                     da memorizzare in un int
    – %lg            Numero reale, in notazione decimale,
                     da memorizzare in un double
    – %c             Carattere, tipicamente codifica ASCII,
                     da memorizzare in un char
    – %s             Stringa (lo spazio è un separatore), tipicamente
                     codifica ASCII, da memorizzare in un char []
Programmazione I - Paolo Valente, 2008/2009                             11
NOTA
• Che succede se ci si sbaglia con le specifiche di
  conversione?
    – Errore logico
    – Errore di gestione della memoria
          o Meno pericoloso nella printf
          o Estremamente dannoso nella scanf: corruzione della
            memoria
• Esempio:
  char a ;
  scanf(“%d”, &a) ; // corruzione della memoria
• Altro tipico errore molto pericoloso:
  int a ;
  scanf(“%d”, a) ; // corruzione della memoria

Programmazione I - Paolo Valente, 2008/2009                      12
File e Input/Output non formattato
• In questo corso non vedremo l'uso dei file e
  l'Input/Output non formattato in C




Programmazione I - Paolo Valente, 2008/2009      13
Direttiva #define
• Solo negli ultimi standard del C è stato introdotto il
  qualificatore const
• Per le costanti in C si usa ancora spesso la direttiva
  #define
• Esempi:
  #define a 5
  #define b2 5.5
• E' una direttiva C/C++ per il preprocessore
• Comporta una sostituzione testuale del simbolo con
  qualsiasi sequenza di caratteri lo segua, prima della
  compilazione
    – Nessuna dichiarazione/controllo di tipo
    – Il simbolo sparisce prima della compilazione
    – Può essere utilizzata anche per sostituzioni più complesse
Programmazione I - Paolo Valente, 2008/2009                  14
Tipo struct ed enum in C
• Anche in C si dispone dei tipi struct ed enum
• Però, data la dichiarazione di due tipi:
  struct <nome_tipo_struct> { ... } ;
  enum <nome_tipo_enum> { ... } ;

  a differenza del C++, in C la definizione di oggetti
  dei due tipi va fatta ripetendo ogni volta
  rispettivamente struct ed enum:
  struct <nome_tipo_struct> nome_variabile1 ;
  enum <nome_tipo_enum> nome_variabile2 ;



Programmazione I - Paolo Valente, 2008/2009              15
typedef 1/2
• Sia in C che in C++ si possono definire dei sinonimi
  di tipi primitivi, oppure di tipi precedentemente
  dichiarati.
   – Si fa mediante le dichiarazioni di nomi typedef
• Esempi:             Nuovo nome (sinonimo) per il tipo
  typedef unsigned int u_int ;
  u_int a ; // equivalente a unsigned int a ;

  typedef struct persona Persona ;
  Persona p ;          Solo in C vanno aggiunti
                                 struct ed enum
  typedef enum colore colore_t ;
  colore_t c ;
Programmazione I - Paolo Valente, 2008/2009          16
typedef 2/2
• Sia in C che in C++ le dichiarazioni typedef possono
  aiutare tantissimo a migliorare la leggibilità dei
  programmi
   – Permettono di evitare di dover ripetere in più punti
     dichiarazioni molto complesse
   – Permettono di sostituire nel programma nomi di
     tipo di basso di livello con nomi di tipo significativi
     nel dominio del problema




Programmazione I - Paolo Valente, 2008/2009              17
Allocazione array dinamici in C
• Mediante funzione di libreria malloc
  – presentata in <cstdlib> (<stdlib.h> in C)
  – prende in ingresso la dimensione, in byte
     dell'oggetto da allocare
  – ritorna l'indirizzo dell'oggetto, oppure
     0 in caso di fallimento (NULL in C)
• Allocazione di un array dinamico:
  <nome_tipo> * identificatore =
     malloc(num_elementi * sizeof(<nome_tipo>)) ;




Programmazione I - Paolo Valente, 2008/2009         18
Deallocazione array dinamici in C
• Mediante funzione di libreria free
  – presentata in <cstdlib> (<stdlib.h> in C)
  – prende in ingresso l'indirizzo dell'oggetto da
    deallocare

• Deallocazione di un array dinamico:
  free(<indirizzo_array>) ;




Programmazione I - Paolo Valente, 2008/2009          19

More Related Content

What's hot

Introduzione al linguaggio PHP
Introduzione al linguaggio PHPIntroduzione al linguaggio PHP
Introduzione al linguaggio PHP
extrategy
 
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimenti08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
Majong DevJfu
 
Capitolo 7 elementi di programmazione c-c++
Capitolo 7   elementi di programmazione  c-c++Capitolo 7   elementi di programmazione  c-c++
Capitolo 7 elementi di programmazione c-c++
Giovanni Della Lunga
 
Lezioni di programmazione in c i file By Cristian Randieri - www.intellisyste...
Lezioni di programmazione in c i file By Cristian Randieri - www.intellisyste...Lezioni di programmazione in c i file By Cristian Randieri - www.intellisyste...
Lezioni di programmazione in c i file By Cristian Randieri - www.intellisyste...
Cristian Randieri PhD
 
14 - Programmazione: Stream e File
14 - Programmazione: Stream e File14 - Programmazione: Stream e File
14 - Programmazione: Stream e File
Majong DevJfu
 
01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai Programmi01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai Programmi
Majong DevJfu
 
Laboratorio Programmazione: In - Out variabili
Laboratorio Programmazione: In - Out variabiliLaboratorio Programmazione: In - Out variabili
Laboratorio Programmazione: In - Out variabili
Majong DevJfu
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio c
ughetta
 

What's hot (20)

Introduzione al linguaggio PHP
Introduzione al linguaggio PHPIntroduzione al linguaggio PHP
Introduzione al linguaggio PHP
 
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimenti08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
 
E6 Concorre
E6 ConcorreE6 Concorre
E6 Concorre
 
3 Linguaggioc
3   Linguaggioc3   Linguaggioc
3 Linguaggioc
 
WordCamp Italia 2021: da zero a PHP
WordCamp Italia 2021: da zero a PHPWordCamp Italia 2021: da zero a PHP
WordCamp Italia 2021: da zero a PHP
 
Lezione1 Linguaggio C
Lezione1 Linguaggio CLezione1 Linguaggio C
Lezione1 Linguaggio C
 
Guida C++
Guida C++Guida C++
Guida C++
 
PHP: strutture di controllo e funzioni
PHP: strutture di controllo e funzioniPHP: strutture di controllo e funzioni
PHP: strutture di controllo e funzioni
 
High Level Synthesis Using Esterel
High Level Synthesis Using EsterelHigh Level Synthesis Using Esterel
High Level Synthesis Using Esterel
 
Capitolo 7 elementi di programmazione c-c++
Capitolo 7   elementi di programmazione  c-c++Capitolo 7   elementi di programmazione  c-c++
Capitolo 7 elementi di programmazione c-c++
 
Lezioni di programmazione in c i file By Cristian Randieri - www.intellisyste...
Lezioni di programmazione in c i file By Cristian Randieri - www.intellisyste...Lezioni di programmazione in c i file By Cristian Randieri - www.intellisyste...
Lezioni di programmazione in c i file By Cristian Randieri - www.intellisyste...
 
T7 librerie
T7 librerieT7 librerie
T7 librerie
 
14 - Programmazione: Stream e File
14 - Programmazione: Stream e File14 - Programmazione: Stream e File
14 - Programmazione: Stream e File
 
Pillole di programmazione in C
Pillole di programmazione in CPillole di programmazione in C
Pillole di programmazione in C
 
01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai Programmi01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai Programmi
 
Linguaggio C++ - Basi
Linguaggio C++ - BasiLinguaggio C++ - Basi
Linguaggio C++ - Basi
 
Laboratorio Programmazione: In - Out variabili
Laboratorio Programmazione: In - Out variabiliLaboratorio Programmazione: In - Out variabili
Laboratorio Programmazione: In - Out variabili
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio c
 
7 Sottoprogrammi
7   Sottoprogrammi7   Sottoprogrammi
7 Sottoprogrammi
 
Bash programming
Bash programmingBash programming
Bash programming
 

Similar to 13 - Programmazione: Compendio C - C++

[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
UltraUploader
 
Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)
STELITANO
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)
STELITANO
 
Deep diving C# 4 (Raffaele Rialdi)
Deep diving C# 4 (Raffaele Rialdi)Deep diving C# 4 (Raffaele Rialdi)
Deep diving C# 4 (Raffaele Rialdi)
DotNetMarche
 
9 Altre Istruzioni Di I O
9   Altre Istruzioni Di I O9   Altre Istruzioni Di I O
9 Altre Istruzioni Di I O
guest60e9511
 
15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi
Majong DevJfu
 
2 Linux Comandi Essenziali
2 Linux Comandi Essenziali2 Linux Comandi Essenziali
2 Linux Comandi Essenziali
Mauro Ferrigno
 
11 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 211 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 2
Majong DevJfu
 
Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)
STELITANO
 
Laboratorio Programmazione: Memoria dinamica
Laboratorio Programmazione: Memoria dinamicaLaboratorio Programmazione: Memoria dinamica
Laboratorio Programmazione: Memoria dinamica
Majong DevJfu
 

Similar to 13 - Programmazione: Compendio C - C++ (20)

05 1 intro-struttura
05 1 intro-struttura05 1 intro-struttura
05 1 intro-struttura
 
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
 
Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)
 
Deep diving C# 4 (Raffaele Rialdi)
Deep diving C# 4 (Raffaele Rialdi)Deep diving C# 4 (Raffaele Rialdi)
Deep diving C# 4 (Raffaele Rialdi)
 
Corso c++
Corso c++Corso c++
Corso c++
 
9 Altre Istruzioni Di I O
9   Altre Istruzioni Di I O9   Altre Istruzioni Di I O
9 Altre Istruzioni Di I O
 
C++.pptx
C++.pptxC++.pptx
C++.pptx
 
15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi
 
2 Linux Comandi Essenziali
2 Linux Comandi Essenziali2 Linux Comandi Essenziali
2 Linux Comandi Essenziali
 
11 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 211 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 2
 
Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)
 
Laboratorio Programmazione: Memoria dinamica
Laboratorio Programmazione: Memoria dinamicaLaboratorio Programmazione: Memoria dinamica
Laboratorio Programmazione: Memoria dinamica
 
Java codestyle & tipstricks
Java codestyle & tipstricksJava codestyle & tipstricks
Java codestyle & tipstricks
 
Programmazione Top Down in C++
Programmazione Top Down in C++Programmazione Top Down in C++
Programmazione Top Down in C++
 
La scomposizione in sotto programmi in C++.pptx
La scomposizione in sotto programmi in C++.pptxLa scomposizione in sotto programmi in C++.pptx
La scomposizione in sotto programmi in C++.pptx
 
Riepilogo Java C/C++
Riepilogo Java C/C++Riepilogo Java C/C++
Riepilogo Java C/C++
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
 
Rest sdk
Rest sdkRest sdk
Rest sdk
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018
 

More from Majong DevJfu

9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud
Majong DevJfu
 
8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes
Majong DevJfu
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product line
Majong DevJfu
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation
Majong DevJfu
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture
Majong DevJfu
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio
Majong DevJfu
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles
Majong DevJfu
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture
Majong DevJfu
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product
Majong DevJfu
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles
Majong DevJfu
 

More from Majong DevJfu (20)

9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud
 
8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product line
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles
 
Uml3
Uml3Uml3
Uml3
 
Uml2
Uml2Uml2
Uml2
 
6
66
6
 
5
55
5
 
4 (uml basic)
4 (uml basic)4 (uml basic)
4 (uml basic)
 
3
33
3
 
2
22
2
 
1
11
1
 
Tmd template-sand
Tmd template-sandTmd template-sand
Tmd template-sand
 
26 standards
26 standards26 standards
26 standards
 

13 - Programmazione: Compendio C - C++

  • 1. Compendio sottoinsieme del C++ a comune col C (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica)
  • 2. Librerie 1/2 • Il solo insieme di istruzioni di un linguaggio di programmazione come il C/C++ è sufficiente a scrivere un qualsiasi programma in grado per lo meno di interagire con l'utente? – Decisamente no • Gli oggetti cin e cout erano oggetti predefinti del linguaggio? Programmazione I - Paolo Valente, 2008/2009 2
  • 3. Librerie 2/2 • No, sono oggetti appartenenti ad una libreria • Una libreria è una raccolta di funzioni ed oggetti che permettono di effettuare determinati insiemi di operazioni – Esistono ad esempio librerie per l'ingresso/uscita, librerie matematiche e così via Programmazione I - Paolo Valente, 2008/2009 3
  • 4. Libreria standard 1/2 • Sia nel linguaggio C che nel linguaggio C++ è prevista la disponibilità di una libreria standard • La libreria standard del C++ è più o meno un sovrainsieme di quella del C • Sia la libreria standard del C che quella del C++ sono costituite da molti moduli, ciascuno dei quali è praticamente una libreria a se stante, che fornisce funzioni ed oggetti per un determinato scopo • Per utilizzare ciascun modulo è tipicamente necessario includere un ben determinato header file Programmazione I - Paolo Valente, 2008/2009 4
  • 5. Libreria standard 2/2 • Alcuni moduli di base della libreria standard sono ad esempio: Libreria Header C Header C++ Matematica math.h cmath Ingresso/Uscita stdio.h iostream Limiti numerici limits.h limits Programmazione I - Paolo Valente, 2008/2009 5
  • 6. Uso dei moduli comuni tra C e C++ • Per utilizzare i moduli della libreria standard C++ a comune col C è bene includere degli header file il cui nome si ottiene, a partire dal nome del corrispondente header file per il C, eliminando il suffisso .h ed aggiungendo una c all'inizio del nome – Es.: la libreria matematica è presentata nell'header file math.h in C, mentre in C++ è presentata nell'header file cmath – Volendo, anche in C++ si possono includere gli header file originali, ma è una pratica sconsigliata • Nel caso del C++, i nomi delle funzioni e degli oggetti di queste librerie sono definiti nello spazio dei nomi std • In pratica, per usarli, bisogna aggiungere sempre la direttiva: using namespace std ; Programmazione I - Paolo Valente, 2008/2009 6
  • 7. Input/Output formattato in C • Diversamente dal C++, in C l'Input/Output formattato è realizzato mediante funzioni di libreria presentate in <stdio.h> – <cstdio> se volete utilizzare tali funzioni in C++ • Tra le funzioni principali: – printf: output formattato su stdout – scanf: input formattato da stdin Programmazione I - Paolo Valente, 2008/2009 7
  • 8. printf void printf(const char format[], ... ) ; Lista valori da stampare • La stringa format può contenere due tipi di oggetti: – Caratteri ordinari (incluso quelli speciali), copiati sullo stdout – Specifiche di conversione, che controllano la traduzione in caratteri del valore dei successivi argomenti o Una per ogni successivo valore da stampare Programmazione I - Paolo Valente, 2008/2009 8
  • 9. printf • Esempio: int a = 15; double b = 16.5 ; printf(“Il valore di a è %d, quello di b è %gn”, a, b) ; • Equivale a cout<<”Il valore di a è “<<a<<”, quello di b è “<<b<<endl; • Si sono utilizzate due delle seguenti specifiche di conversione: – %d Numero intero, stampare in notazione decimale – %g Numero reale, stampare in notazione decimale – %c Carattere, tipicamente codifica ASCII – %s Stringa, tipicamente codifica ASCII Programmazione I - Paolo Valente, 2008/2009 9
  • 10. scanf void scanf(const char format[], &<nome_variabile>) ; Variabile da modificare • La stringa format può contenere solo specifiche di conversione – Supponiamo solo una – Controlla l'interpretazione da dare ai caratteri letti da stdin per determinare il valore da memorizzare nella variabile passata come secondo argomento Programmazione I - Paolo Valente, 2008/2009 10
  • 11. scanf • Esempio: int a ; scanf(“%d”, &a) ; // equivale a cin>>a ; • Si è utilizzata una delle seguenti specifiche di conversione: – %d Numero intero, in notazione decimale, da memorizzare in un int – %lg Numero reale, in notazione decimale, da memorizzare in un double – %c Carattere, tipicamente codifica ASCII, da memorizzare in un char – %s Stringa (lo spazio è un separatore), tipicamente codifica ASCII, da memorizzare in un char [] Programmazione I - Paolo Valente, 2008/2009 11
  • 12. NOTA • Che succede se ci si sbaglia con le specifiche di conversione? – Errore logico – Errore di gestione della memoria o Meno pericoloso nella printf o Estremamente dannoso nella scanf: corruzione della memoria • Esempio: char a ; scanf(“%d”, &a) ; // corruzione della memoria • Altro tipico errore molto pericoloso: int a ; scanf(“%d”, a) ; // corruzione della memoria Programmazione I - Paolo Valente, 2008/2009 12
  • 13. File e Input/Output non formattato • In questo corso non vedremo l'uso dei file e l'Input/Output non formattato in C Programmazione I - Paolo Valente, 2008/2009 13
  • 14. Direttiva #define • Solo negli ultimi standard del C è stato introdotto il qualificatore const • Per le costanti in C si usa ancora spesso la direttiva #define • Esempi: #define a 5 #define b2 5.5 • E' una direttiva C/C++ per il preprocessore • Comporta una sostituzione testuale del simbolo con qualsiasi sequenza di caratteri lo segua, prima della compilazione – Nessuna dichiarazione/controllo di tipo – Il simbolo sparisce prima della compilazione – Può essere utilizzata anche per sostituzioni più complesse Programmazione I - Paolo Valente, 2008/2009 14
  • 15. Tipo struct ed enum in C • Anche in C si dispone dei tipi struct ed enum • Però, data la dichiarazione di due tipi: struct <nome_tipo_struct> { ... } ; enum <nome_tipo_enum> { ... } ; a differenza del C++, in C la definizione di oggetti dei due tipi va fatta ripetendo ogni volta rispettivamente struct ed enum: struct <nome_tipo_struct> nome_variabile1 ; enum <nome_tipo_enum> nome_variabile2 ; Programmazione I - Paolo Valente, 2008/2009 15
  • 16. typedef 1/2 • Sia in C che in C++ si possono definire dei sinonimi di tipi primitivi, oppure di tipi precedentemente dichiarati. – Si fa mediante le dichiarazioni di nomi typedef • Esempi: Nuovo nome (sinonimo) per il tipo typedef unsigned int u_int ; u_int a ; // equivalente a unsigned int a ; typedef struct persona Persona ; Persona p ; Solo in C vanno aggiunti struct ed enum typedef enum colore colore_t ; colore_t c ; Programmazione I - Paolo Valente, 2008/2009 16
  • 17. typedef 2/2 • Sia in C che in C++ le dichiarazioni typedef possono aiutare tantissimo a migliorare la leggibilità dei programmi – Permettono di evitare di dover ripetere in più punti dichiarazioni molto complesse – Permettono di sostituire nel programma nomi di tipo di basso di livello con nomi di tipo significativi nel dominio del problema Programmazione I - Paolo Valente, 2008/2009 17
  • 18. Allocazione array dinamici in C • Mediante funzione di libreria malloc – presentata in <cstdlib> (<stdlib.h> in C) – prende in ingresso la dimensione, in byte dell'oggetto da allocare – ritorna l'indirizzo dell'oggetto, oppure 0 in caso di fallimento (NULL in C) • Allocazione di un array dinamico: <nome_tipo> * identificatore = malloc(num_elementi * sizeof(<nome_tipo>)) ; Programmazione I - Paolo Valente, 2008/2009 18
  • 19. Deallocazione array dinamici in C • Mediante funzione di libreria free – presentata in <cstdlib> (<stdlib.h> in C) – prende in ingresso l'indirizzo dell'oggetto da deallocare • Deallocazione di un array dinamico: free(<indirizzo_array>) ; Programmazione I - Paolo Valente, 2008/2009 19