Newsgroup: it.hobby.elettronica.digitale
Titolo: prototipo di una funzione

Ciao a tutti!
Proseguono gli studi, ho letto che se si vuole rispettare ANSI per tutte le 
funzioni bisogna scrivere il prototipo della funzione, ora guardando diversi 
sorgenti mi accorgo che (sempre nello stresso sorgente) ci sono funzioni che 
adottano l'uso del prototipo di funzione ed altre funzioni no, come mai? 


I prototipi di solito vengono messi nell'header del modulo (file.h), in 
modo da poter usare le funzioni da altri file.
Se una funzione viene usata solo all'interno del file in cui è 
implementata puoi dichiararla "static": diventa visibile solo 
all'interno del file in cui è dichiarata (e solo da dopo 
l'implementazione in poi) e non ha bisogno di prototipo.
Se hai altri dubbi posta esempi concreti che possiamo spiegarti meglio.
-- 
  _|/ Francesco Sacchi - Develer S.r.l., R&D dept.
   |\ 
http://www.develer.com/
 - 
http://www.bertos.org/


Posso farlo in privato? non so se il codice che sto studiando da esempio 
puo' essere divulgato pubblicamente. 

diego ha scritto:

pero' puoi astrarre le parti necessarie alle domande :-)
a proposito della tua domanda, tieni conto che il compilatore e' in 
grado di estrarre il prototipo di una funzione anche dalla sua 
definizione, per cui scrivere il prototipo e' necessario solo se usi la 
funzione prima della sua definizione vedi per esempio i seguenti frammenti.
// in questo caso il prototipo di pluto() non e' necessario!
// perche' il compilatore lo ricava dalla definizione
void pluto(int n) {
     printf("%s\n",n);
}
void pippo(int a) {
     pluto(1);
}
// in questo caso il prototipo di qua() ci vuole
// in quanto al suo primo uso non e' noto
void qua(int n);
void qui(int a) {
     qua(1);
}
void qua(int n) {
     printf("%s\n",n);
}
nel caso che invece la funzione di trovi in un altro modulo di 
compilazione i prototipi sono necessari sempre
questo perche' ( almeno storicamente ) i compilatori C sono mono-passo ( 
ovvero leggono il sorgente una sola volta ) e compilano le varie unita' 
di compilazione in maniera indipendente tra loro ( i file include 
funzionano da interconnessione tra i vari moduli e poi ci pensa il 
linker a mettere tutto insieme )


ora stampo il tuo messaggio e' studio :-) quello che hai scritto.
Grazie 

 programmazione in C, ma non essendo cosi' purtroppo
Intendi dire che la CIA fa sviluppare i suoi software a dei niubbi o che il
tuo codice offende il comune senso del pudore?

"F. Coglionazzi"  ha scritto nel messaggio:

Ma sto COglionazzi deve inervenire proprio su tutto ma che individuo di 
merda. 

 
direi che hai bisogno di fare un passo indietro e studiare prima le 
basi, poi passare ad analizzare codice di un certo spessore
tra l'altro lascia perdere lo "stile" di scrittura dei sorgenti, ognuno 
adotta quello che piu' gli aggrada ( fermo restando la scrittura di 
codice "corretto" ) per cui meglio trovare il proprio che tentare 
seguire stili altrui
un consiglio a latere: impara ad usare un debugger, e' MOLTO utile nello 
sviluppo del codice.



Quello che voleva dirti è semplicemente che potresti trovare scritto:
void pippo (void); //prototipo
void pippo (void) {
    //fai qualcosa
}
oppure:
void pippo (void) {
    //fai qualcosa
};
nel primo trovi prima il prototipo e nel secondo tutto quanto insieme. Nel 
primo caso puoi usare la funzione pippo prima di aver scritto 
l'implementazione, perchè il compilatore già conosce che esiste una funzione 
pippo implementata da qualche parte e andrà a ricercarla. Nel secondo caso, 
invece, la funzione pippo puoi usarla solo dopo.
Ciao
CG 

 CG
Grazie a te  e a tutti quelli che hanno risposto costruttivamente.
Comunque il libro che sto studiando riporta che il prototipo di funzione 
bisognerebbe usarlo sempre perche' permette di prevenire errori ed e' stato 
adottato dalle specifiche ANSI e deriva dal C++