Я хочу иметь возможность создавать набор функций в файле заголовка, который я мог бы включить # в одной из моих программ на C.
Как создать файлы заголовков C
Ответ 1
- Откройте свой любимый текстовый редактор
- Создайте новый файл с именем whatever.h
- Поместите в него свои прототипы функций
DONE.
Пример what.h
#ifndef WHATEVER_H_INCLUDED
#define WHATEVER_H_INCLUDED
int f(int a);
#endif
Примечание. Включите защиту (команды препроцессора), добавленные благодаря luke. Они избегают включения одного и того же заголовочного файла дважды в одну и ту же компиляцию. Другая возможность (также упоминаемая в комментариях) заключается в добавлении #pragma once
, но она не гарантируется для каждого компилятора.
Пример what.c
#include "whatever.h"
int f(int a) { return a + 1; }
И затем вы можете включить "whatever.h" в любой другой .c файл и связать его с файлом объектов any.c.
Вот так:
sample.c
#include "whatever.h"
int main(int argc, char **argv)
{
printf("%d\n", f(2)); /* prints 3 */
return 0;
}
Скомпилировать его (если вы используете GCC):
$ gcc -c whatever.c -o whatever.o
$ gcc -c sample.c -o sample.o
Чтобы связать файлы для создания исполняемого файла:
$ gcc sample.o whatever.o -o sample
Вы можете протестировать образец:
$ ./sample
3
$
Ответ 2
Заголовочные файлы могут содержать любой допустимый C-код, поскольку перед компиляцией он вводится в блок компиляции предварительным процессором.
Если заголовочный файл содержит функцию и включается несколькими .c
файлами, каждый .c
файл получает копию этой функции и создает для нее символ. Компонент будет жаловаться на дублирующие символы.
Технически возможно создавать функции static
в файле заголовка для включения в несколько файлов .c
. Хотя это, как правило, не выполняется, потому что он нарушает соглашение о том, что код найден в файлах .c
, а объявления найдены в файлах .h
.
См. обсуждения в C/С++: статическая функция в файле заголовка, что это значит? для более подробного объяснения.