Я хочу иметь возможность создать набор функций в заголовочном файле, который я мог бы #include в одной из моих программ C.
Как я могу создать заголовочные файлы C
Ответы (2)
- Откройте ваш любимый текстовый редактор
- Создайте новый файл с именем what.h
- Поместите в него свои прототипы функций
ГОТОВО.
Пример что угодно.h
#ifndef WHATEVER_H_INCLUDED
#define WHATEVER_H_INCLUDED
int f(int a);
#endif
Примечание: включите защиту (команды препроцессора), добавленную благодаря Люку. Они избегают включения одного и того же заголовочного файла дважды в одну и ту же компиляцию. Другая возможность (также упомянутая в комментариях) — добавить #pragma once
, но не гарантируется, что она будет поддерживаться каждым компилятором.
Пример
#include "whatever.h"
int f(int a) { return a + 1; }
И затем вы можете включить "whatever.h" в любой другой файл .c и связать его с объектным файлом what.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
$
#pragma once
, нестандартный, но широко поддерживаемый и (на мой взгляд) намного проще.
- person Michael Mrozek; 14.05.2010
size_t
. Если вы включаете <stddef.h>
(наименьший заголовок, который typedef size_t
), то заголовок может быть включен где угодно. См. стандарт кодирования Центра космических полетов имени Годдарда НАСА (в частности, стандарт кодирования C).
- person Jonathan Leffler; 14.05.2010
C
и header files
. Я сомневаюсь. Обязательно ли имя файла заголовка и файла, содержащего определение прототипов, имеют одно и то же имя? В вашем случае whatever.h
и whatever.c
. или есть stdio.h
и stdio.c
всегда?
- person noufal; 10.10.2013
.h
? потому что мы не даем никакой подсказки, где определены функции.
- person noufal; 11.10.2013
Файлы заголовков могут содержать любой допустимый код C, поскольку они внедряются в модуль компиляции препроцессором перед компиляцией.
Если заголовочный файл содержит функцию и включен в несколько .c
файлов, каждый .c
файл получит копию этой функции и создаст для нее символ. Компоновщик будет жаловаться на повторяющиеся символы.
Технически возможно создать static
функции в заголовочном файле для включения в несколько .c
файлов. Хотя это обычно не делается, потому что это нарушает соглашение о том, что код находится в .c
файлах, а объявления находятся в .h
файлах.
См. обсуждение в разделе C/C++: статическая функция в заголовке. файл, что это значит? для получения дополнительных объяснений.