Newsgroup: it.comp.lang.c++
Titolo: FAQ 12-13 -- RISPOSTE

"Che cosa e` un header? Come si creano e come si usano?"
Fornite risposte complete, ma cercate di non dilungarvi...
Paolo
-----------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
-----------------------------------------------

 Fornite risposte complete, ma cercate di non dilungarvi...
E' un file di testo che, al pari dei sorgenti del programma, contiene
istruzioni e definizioni del C/C++. Per convenzione, a questi file si dà un
nome con estensione .h.
Niente vieta di non usarli, e neanche di scrivere tutto il codice del
programma all'interno di un header e poi nel file sorgente scrivere
semplicemente:
#include "mio_header.h"
ma l'uso che se ne fa solitamente è legato al riuso del codice/strutture
dati e alla condivisione di codice e strutture dati tra i diversi sorgenti
di un programma per garantirne la modularità.
Idealmente, un header dovrebbe contenere solo le dichiarazioni che si
intende "esportare", mentre il codice vero e proprio deve essere contenuto
in un file separato. Ciò facilità anche la produzione di librerie
commerciali: dato che il linguaggio richiede la dichiarazione prima
dell'utilizzo ma non la sua implementazione, ad ogni compilazione di un
sorgente non vengono ricompilati anche i file che contengono il codice delle
funzioni contenute negli header utilizzati, che perciò possono anche non
essere disponibili.
E' in questo modo che funzionano le librerie: gli header sono a disposizione
del programmatore, mentre il codice, una volta compilato, non è necessario
che sia visibile.
Cosa ve ne pare come inizio? Probabilmente andrebbe riscritto in forma più
umana e completato, ma credo che le cose principali ci siano.
--
Alessandro Monti

 "Che cosa e` un header? Come si creano e come si usano?"
Un header file č un file di testo contenente normalmente dichiarazioni
di funzioni o tipi. Lo scopo principale di un header file č quello di
raggruppare in un unico punto del programma tutte le dichiarazioni
relative ad un certo argomento (ad esempio, parlando di header files
standard, tutte quelle riguardanti l'I/O in iostream o quelle
riguardanti il tipo std::vector in vector) ed evitare cosě possibili
errori di battitura da parte del programmatore. La dichiarazione, a sua
volta, consente al compilatore di controllare la correttezza dei
parametri passati e restituiti dalle funzioni.
EMG

Enrico Maria Giordano wrote:

Non č possibile inserire sempre solo delle dichiarazioni nei file .h :
oltre alle funzioni inline che debbono essere per forza nella stessa
translation unit dove vengono usate, anche le definizioni delle classi
(class A {}; č una definizione perchč se la scrivo due volte mi dice che ho
definito due volte il tipo A) vengono comunemente incluse in file .h.
Un'altra cosa che secondo me č importante č che gli header file vengono
utilizzati per raggrupprare un interfaccia; cioč sarebbe possibile
raggruppare in un file header le dichiarazioni di piů funzioni anche non
logicamente correlate ed includere sempre quel file, tanto il compilatore
utilizzerebbe solamente le funzioni che vengono poi effettivamente usate
nel codice; comunemente perň questo viene evitato perchč si preferisce
mantenere le interfaccie separate. Ciao FBF.

Direi che un'unione della risposta di Enrico Maria e di Marco sia l'ideale.
Da studente di informatica mi sembra chiaro, non prolisso e abbastanza
esauriente considerato lo scopo delle faqs.
San Vegeta

Secondo Stroustrup per le classi si puo' utilizzare indifferentemente i
termini dichiarazione e definizione. In effetti una "cosa" tipo
class A {};
definisce un nome nello scope corrente, ma non riserva spazio di
memoria, che e' l'altra caratteristica delle definizioni.
Ciao,
Nicola