Как создать файлы заголовков 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/С++: статическая функция в файле заголовка, что это значит? для более подробного объяснения.