Хто-небудь може пояснити, як створити файл заголовка в 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
яка приймає a 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 / # визначає навколо свого .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;
}