Kann jemand anhand eines einfachen Beispiels von Anfang bis Ende erklären, wie eine Header-Datei in C erstellt wird.
Kann jemand anhand eines einfachen Beispiels von Anfang bis Ende erklären, wie eine Header-Datei in C erstellt wird.
Antworten:
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;
}
Haupt 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;
}
Kompilieren mit 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
dient als Doppeleinschlussschutz.
Für die Funktionsdeklaration müssen Sie nur die Signatur definieren, dh ohne Parameternamen wie folgt:
int foo(char*);
Wenn Sie wirklich möchten, können Sie auch den Bezeichner des Parameters einschließen, dies ist jedoch nicht erforderlich, da der Bezeichner nur im Hauptteil einer Funktion (Implementierung) verwendet wird, der im Falle eines Headers (Parametersignatur) fehlt.
Dies deklariert die Funktion, foo
die a akzeptiert char*
und an zurückgibt int
.
In Ihrer Quelldatei hätten Sie:
#include "my_header.h"
int foo(char* name) {
//do stuff
return 0;
}
extern
Deklarationen von Variablen und zu sammeln Funktionen in einer separaten Datei, die in der Vergangenheit als Header bezeichnet wurde und #include
am Anfang jeder Quelldatei steht. Die Funktionen der Standardbibliothek werden beispielsweise in Headern wie <stdio.h>
".
myfile.h
#ifndef _myfile_h
#define _myfile_h
void function();
#endif
myfile.c
#include "myfile.h"
void function() {
}
void function();
als Deklaration verhindert nicht Anrufe wie function(42);
. Verwenden Sie void
in der Erklärung wievoid function(void);
Header-Dateien enthalten Prototypen für Funktionen, die Sie in einer .c- oder .cpp / .cxx-Datei definieren (je nachdem, ob Sie c oder c ++ verwenden). Sie möchten # ifndef / # define um Ihren .h-Code platzieren, sodass die Prototypen nur einmal enthalten sind, wenn Sie dieselbe .h zweimal in verschiedenen Teilen Ihrer Programme einfügen.
client.h
#ifndef CLIENT_H
#define CLIENT_H
short socketConnect(char *host,unsigned short port,char *sendbuf,char *recievebuf, long rbufsize);
#endif /** CLIENT_H */
Dann würden Sie die .h in eine .c-Datei wie folgt implementieren:
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;
}