View Full Version : C++ Funzioni e Dichiarazione
Salve ho iniziato da poco a fare le Funzioni in C++ per poi passare agli Array, mi sono subito fermato alla dichiarazione e definizione di una funzione (di tipo int) :muro: che sarebbe questa:
#include <iostream>
using namespace std;
int moltiplica (int x, int y);
int moltiplica (int x, int y)
{
int ris;
ris=x*y;
return ris;
}
main()
{
int a=5;
int b=6;
int risultato;
risultato=moltiplica (a,b);
cout << "Il risultato e':" << risultato << endl;
return 0;
}
Perchè bisogna dichiarare int moltiplica per 2 volte, la seconda senza punto e virgola? Non riesco a capire..
vendettaaaaa
04-04-2015, 11:47
Salve ho iniziato da poco a fare le Funzioni in C++ per poi passare agli Array, mi sono subito fermato alla dichiarazione e definizione di una funzione (di tipo int) :muro: che sarebbe questa:
#include <iostream>
using namespace std;
int moltiplica (int x, int y);
int moltiplica (int x, int y)
{
int ris;
ris=x*y;
return ris;
}
main()
{
int a=5;
int b=6;
int risultato;
risultato=moltiplica (a,b);
cout << "Il risultato e':" << risultato << endl;
return 0;
}
Perchè bisogna dichiarare int moltiplica per 2 volte, la seconda senza punto e virgola? Non riesco a capire..
Se togli la dichiarazione con punto e virgola funziona lo stesso!
Cmq la dichiarazione di una funziona va fatta in un punto del file precedente (più in alto) a dove la usi, per far sapere al compilatore che c'è. La definizione può anche stare altrove (dopo il main nel tuo caso, o in un altro file)
Se togli la dichiarazione con punto e virgola funziona lo stesso!
Cmq la dichiarazione di una funziona va fatta in un punto del file precedente (più in alto) a dove la usi, per far sapere al compilatore che c'è. La definizione può anche stare altrove (dopo il main nel tuo caso, o in un altro file)
Quindi la dichiarazione della funzione sta prima della scrittura del programma, mentre la definizione del prototipo di funzione non è sempre obbligatoria, si usa sono nel passaggio per valore?
vendettaaaaa
04-04-2015, 12:19
Quindi la dichiarazione della funzione sta prima della scrittura del programma, mentre la definizione del prototipo di funzione non è sempre obbligatoria, si usa sono nel passaggio per valore?
??? che c'entra il passaggio per valore?
Nel tuo esempio la dichiarazione è:
int moltiplica (int x, int y);
La definizione è:
int moltiplica (int x, int y)
{
int ris;
ris=x*y;
return ris;
}
cioè il corpo della funzione.
Se non la definisci, nel main tenti di usare una funzione che... si sa che forma ha (cioè che parametri accetta e cosa restituisce) ma non si sa cosa faccia.
La definizione, dato che richiede di ripetere int moltiplica (int x, int y) fa anche da dichiarazione, per questo se nel tuo codice togli la dichiarazione il programma funziona lo stesso.
Quindi, questi casi compilano correttamente:
// In main uso una funzione dichiarata prima e definita dopo
int foo(int a, int b);
int main(){ int c = foo(1, 2); return 0; }
int foo(int a, int b){ return a + b; }
// In main uso una funzione definita (e quindi dichiarata) prima
int foo(int a, int b){ return a + b; }
int main(){ int c = foo(1, 2); return 0; }
Questi no:
// In main() sto usando una funzione che non so che esista (perchè è dichiarata dopo)
int main(){ int c = foo(1, 2); return 0; }
int foo(int a, int b){ return a + b; }
// In main uso una funzione che è dichiarata ma non è definita
int foo(int a, int b);
int main(){ int c = foo(1, 2); return 0; }
??? che c'entra il passaggio per valore?
Nel tuo esempio la dichiarazione è:
int moltiplica (int x, int y);
La definizione è:
int moltiplica (int x, int y)
{
int ris;
ris=x*y;
return ris;
}
cioè il corpo della funzione.
Se non la definisci, nel main tenti di usare una funzione che... si sa che forma ha (cioè che parametri accetta e cosa restituisce) ma non si sa cosa faccia.
La definizione, dato che richiede di ripetere int moltiplica (int x, int y) fa anche da dichiarazione, per questo se nel tuo codice togli la dichiarazione il programma funziona lo stesso.
Quindi, questi casi compilano correttamente:
// In main uso una funzione dichiarata prima e definita dopo
int foo(int a, int b);
int main(){ int c = foo(1, 2); return 0; }
int foo(int a, int b){ return a + b; }
// In main uso una funzione definita (e quindi dichiarata) prima
int foo(int a, int b){ return a + b; }
int main(){ int c = foo(1, 2); return 0; }
Questi no:
// In main() sto usando una funzione che non so che esista (perchè è dichiarata dopo)
int main(){ int c = foo(1, 2); return 0; }
int foo(int a, int b){ return a + b; }
// In main uso una funzione che è dichiarata ma non è definita
int foo(int a, int b);
int main(){ int c = foo(1, 2); return 0; }
Grazie dell'aiuto, ero un pò confuso perche stavo leggendo la guida sul c++ di Html ma non spiegano gli esempi
Comunque, di solito, le dichiarazioni delle funzioni, e le strutture dati, vengono inserite in un header file, che poi viene incluso nei sorgenti in cui li si utilizza. :D
PS: onestamente, ti consiglio "Thinking in C++", di Eckel :D
Comunque, di solito, le dichiarazioni delle funzioni, e le strutture dati, vengono inserite in un header file, che poi viene incluso nei sorgenti in cui li si utilizza. :D
PS: onestamente, ti consiglio "Thinking in C++", di Eckel :D
Grazie del consiglio :)
giuseppe '97
12-04-2015, 19:26
Salve ho iniziato da poco a fare le Funzioni in C++ per poi passare agli Array, mi sono subito fermato alla dichiarazione e definizione di una funzione (di tipo int) :muro: che sarebbe questa:
#include <iostream>
using namespace std;
int moltiplica (int x, int y);
int moltiplica (int x, int y)
{
int ris;
ris=x*y;
return ris;
}
main()
{
int a=5;
int b=6;
int risultato;
risultato=moltiplica (a,b);
cout << "Il risultato e':" << risultato << endl;
return 0;
}
Perchè bisogna dichiarare int moltiplica per 2 volte, la seconda senza punto e virgola? Non riesco a capire..
In realtà quella dichiarazione scritta così è un po' inutile. La versione con il punto e virgola è una dichiarazione, ma serve per indicare al compilatore che deve cercare una struttura uguale messa da qualche altra parte del file (per essere più ordinati o perchè ci si doveva ancora lavorare). Scrivere dichiarazione e definizione di seguito non ha alcun senso :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.