Qualcuno può spiegare come creare un file di intestazione in C con un semplice esempio dall'inizio alla fine.
Qualcuno può spiegare come creare un file di intestazione in C con un semplice esempio dall'inizio alla fine.
Risposte:
foo.h
#ifndef FOO_H_ /* Include guard */
#define FOO_H_
int foo(int x); /* An example function declaration */
#endif // FOO_H_
foo.c
#include "foo.h" /* Include the header (not strictly necessary here) */
int foo(int x) /* Function definition */
{
return x + 5;
}
main.c
#include <stdio.h>
#include "foo.h" /* Include the header here, to obtain the function declaration */
int main(void)
{
int y = foo(3); /* Use the function here */
printf("%d\n", y);
return 0;
}
Per compilare utilizzando GCC
gcc -o my_app main.c foo.c
#ifndef MY_HEADER_H
# define MY_HEADER_H
//put your function headers here
#endif
MY_HEADER_H
funge da guardia a doppia inclusione.
Per la dichiarazione di funzione, è sufficiente definire la firma, ovvero senza i nomi dei parametri, in questo modo:
int foo(char*);
Se vuoi davvero, puoi anche includere l'identificatore del parametro, ma non è necessario perché l'identificatore verrebbe usato solo nel corpo di una funzione (implementazione), che nel caso di un'intestazione (firma del parametro), manca.
Questo dichiara la funzione foo
che accetta a char*
e restituisce un int
.
Nel tuo file sorgente, avresti:
#include "my_header.h"
int foo(char* name) {
//do stuff
return 0;
}
extern
dichiarazioni di variabili e funzioni in un file separato, storicamente chiamato header , che è incluso #include
nella parte anteriore di ogni file sorgente. Le funzioni della libreria standard, ad esempio, sono dichiarate come header <stdio.h>
. "
MYFILE.H
#ifndef _myfile_h
#define _myfile_h
void function();
#endif
miofile.c
#include "myfile.h"
void function() {
}
void function();
come una dichiarazione non impedisce chiamate simili function(42);
. Utilizzare void
nella dichiarazione comevoid function(void);
i file di intestazione contengono prototipi per le funzioni definite in un file .c o .cpp / .cxx (a seconda se si utilizza c o c ++). Si desidera posizionare # ifndef / # definisce attorno al proprio codice .h in modo che se si include lo stesso .h due volte in parti diverse dei programmi, i prototipi vengono inclusi solo una volta.
client.h
#ifndef CLIENT_H
#define CLIENT_H
short socketConnect(char *host,unsigned short port,char *sendbuf,char *recievebuf, long rbufsize);
#endif /** CLIENT_H */
Quindi implementeresti il file .h in un file .c in questo modo:
client.c
#include "client.h"
short socketConnect(char *host,unsigned short port,char *sendbuf,char *recievebuf, long rbufsize) {
short ret = -1;
//some implementation here
return ret;
}