Czy ktoś może wyjaśnić, jak utworzyć plik nagłówkowy w C na prostym przykładzie od początku do końca.
Czy ktoś może wyjaśnić, jak utworzyć plik nagłówkowy w C na prostym przykładzie od początku do końca.
Odpowiedzi:
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;
}
Aby skompilować za pomocą 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
służy jako ochrona przed podwójnym włączeniem.
Do deklaracji funkcji wystarczy zdefiniować podpis, czyli bez nazw parametrów, na przykład:
int foo(char*);
Jeśli naprawdę chcesz, możesz również dołączyć identyfikator parametru, ale nie jest to konieczne, ponieważ identyfikator byłby używany tylko w treści funkcji (implementacji), której w przypadku nagłówka (sygnatura parametru) go brakuje.
To deklaruje funkcję, foo
która akceptuje a char*
i zwraca int
.
W swoim pliku źródłowym miałbyś:
#include "my_header.h"
int foo(char* name) {
//do stuff
return 0;
}
extern
deklaracji zmiennych i funkcje w oddzielnym pliku, historycznie nazywanym nagłówkiem , który jest dołączany #include
na początku każdego pliku źródłowego. Funkcje biblioteki standardowej, na przykład, są deklarowane w nagłówkach, takich jak <stdio.h>
. "
myfile.h
#ifndef _myfile_h
#define _myfile_h
void function();
#endif
myfile.c
#include "myfile.h"
void function() {
}
void function();
jako deklaracja nie zapobiega wywołaniom typu function(42);
. Użyj void
w deklaracji jakvoid function(void);
Pliki nagłówkowe zawierają prototypy funkcji, które definiujesz w pliku .c lub .cpp / .cxx (w zależności od tego, czy używasz c czy c ++). Chcesz umieścić # ifndef / # definiuje wokół swojego kodu .h, więc jeśli umieścisz ten sam plik .h dwa razy w różnych częściach programów, prototypy zostaną uwzględnione tylko raz.
client.h
#ifndef CLIENT_H
#define CLIENT_H
short socketConnect(char *host,unsigned short port,char *sendbuf,char *recievebuf, long rbufsize);
#endif /** CLIENT_H */
Następnie zaimplementowałbyś .h w pliku .c w następujący sposób:
klient.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;
}