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
risposta
- Aprite il vostro editor di testo preferito
- Creare un nuovo file chiamato whatever.h
- 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
$
si potrebbe voler menzionare le guardie di intestazione – luke
@luke: Grazie mille. Non ho idea di cosa siano le protezioni dell'intestazione. Andando a google ora. Grazie ancora. –
@luke: oh! Io vedo. Buon punto Andando ad aggiungerli. –
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.
con un editor di testo? – stefanB
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? –
Sì, hai ragione. – user340838