Может кто-нибудь объяснить, как создать заголовочный файл в C на простом примере от начала до конца.
Может кто-нибудь объяснить, как создать заголовочный файл в C на простом примере от начала до конца.
Ответы:
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;
}
Компилировать с помощью 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
служит в качестве охранника двойного включения.
Для объявления функции вам нужно только определить сигнатуру, то есть без имен параметров, например:
int foo(char*);
Если вы действительно хотите, вы также можете включить идентификатор параметра, но это необязательно, потому что идентификатор будет использоваться только в теле функции (реализации), которое в случае заголовка (подписи параметра) отсутствует.
Это объявляет функцию, foo
которая принимает char*
и возвращает int
.
В вашем исходном файле вы должны иметь:
#include "my_header.h"
int foo(char* name) {
//do stuff
return 0;
}
extern
объявления переменных и функции в отдельном файле, исторически называемом заголовком , который включается #include
в начало каждого исходного файла. Функции стандартной библиотеки, например, объявляются в заголовках как <stdio.h>
. "
myfile.h
#ifndef _myfile_h
#define _myfile_h
void function();
#endif
myfile.c
#include "myfile.h"
void function() {
}
void function();
так как декларация не мешает звонкам вроде function(42);
. Используйте void
в объявлении какvoid function(void);
Заголовочные файлы содержат прототипы для функций, которые вы определяете в файле .c или .cpp / .cxx (в зависимости от того, используете ли вы c или c ++). Вы хотите поместить # ifndef / # define вокруг вашего .h кода, чтобы, если вы включаете один и тот же .h дважды в разные части ваших программ, прототипы включаются только один раз.
client.h
#ifndef CLIENT_H
#define CLIENT_H
short socketConnect(char *host,unsigned short port,char *sendbuf,char *recievebuf, long rbufsize);
#endif /** CLIENT_H */
Затем вы реализуете .h в файле .c следующим образом:
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;
}