2010-05-14 15 views
59

Desidero essere in grado di creare una raccolta di funzioni in un file di intestazione che potrei includere #include in uno dei miei programmi C.Come creare file di intestazione C

+43

con un editor di testo? – stefanB

+12

Se seguo correttamente, ciò che si desidera è creare una libreria, simile alle librerie C standard in modo da includere un file di intestazione con le definizioni di funzione, quindi collegarlo a quella libreria quando si costruisce l'eseguibile finale. È giusto? –

+0

Sì, hai ragione. – user340838

risposta

133
  1. Aprite il vostro editor di testo preferito
  2. Creare un nuovo file chiamato whatever.h
  3. Metti la tua prototipi di funzioni in esso

FATTO.

Esempio whatever.h

#ifndef WHATEVER_H_INCLUDED 
#define WHATEVER_H_INCLUDED 
int f(int a); 
#endif 

Nota: sono le protezioni (comandi del preprocessore) aggiunto grazie a Luca. Evitano di includere lo stesso file di intestazione due volte nella stessa compilation. Un'altra possibilità (citata anche nei commenti) è aggiungere #pragma once ma non è garantito il supporto per ogni compilatore.

Esempio whatever.c

#include "whatever.h" 

int f(int a) { return a + 1; } 

E poi si può includere "whatever.h" in qualsiasi altro file .c, e collegarlo con il file oggetto di whatever.c.

Ti piace questa:

sample.c

#include "whatever.h" 

int main(int argc, char **argv) 
{ 
    printf("%d\n", f(2)); /* prints 3 */ 
    return 0; 
} 

compilarlo (se si usa GCC):

$ gcc -c whatever.c -o whatever.o 
$ gcc -c sample.c -o sample.o 

per collegare i file per creare un file eseguibile:

$ gcc sample.o whatever.o -o sample 

È possibile eseguire il test sample:

$ ./sample 
3 
$ 
+7

si potrebbe voler menzionare le guardie di intestazione – luke

+0

@luke: Grazie mille. Non ho idea di cosa siano le protezioni dell'intestazione. Andando a google ora. Grazie ancora. –

+0

@luke: oh! Io vedo. Buon punto Andando ad aggiungerli. –

2

I file di intestazione possono contenere qualsiasi codice C valido, poiché vengono iniettati nell'unità di compilazione dal pre-processore prima della compilazione.

Se un file di intestazione contiene una funzione ed è incluso in più file .c, ciascun file .c riceverà una copia di tale funzione e ne creerà un simbolo. Il linker si lamenterà dei simboli duplicati.

È tecnicamente possibile creare le funzioni static in un file di intestazione per l'inclusione in più file .c. Anche se questo non viene generalmente fatto perché si rompe dalla convenzione che il codice si trova nei file .c e le dichiarazioni si trovano nei file .h.

Vedere le discussioni in C/C++: Static function in header file, what does it mean? per ulteriori spiegazioni.

Problemi correlati