2010-05-14 5 views
59

Я хочу, чтобы иметь возможность создавать набор функций в файле заголовка, который я мог бы включить # в одной из моих программ на C.Как создать файлы заголовков C

+43

с текстовым редактором? – stefanB

+12

Если я следую должным образом, то вы хотите создать библиотеку, похожую на стандартные библиотеки C, чтобы вы включали заголовочный файл с определениями функций, а затем ссылались на эту библиотеку при создании окончательного исполняемого файла. Это правильно? –

+0

Да, вы правы. – user340838

ответ

133
  1. Откройте ваш любимый текстовый редактор
  2. Создайте новый файл с именем whatever.h
  3. Положите прототипы функций в нем

DONE.

Пример whatever.h

#ifndef WHATEVER_H_INCLUDED 
#define WHATEVER_H_INCLUDED 
int f(int a); 
#endif 

Примечание: включают в себя защитные ограждения (команды препроцессора) добавлен благодаря LuKe. Они избегают включения одного и того же заголовочного файла дважды в одну и ту же компиляцию. Другая возможность (также упоминаемая в комментариях) заключается в добавлении #pragma once, но она не гарантируется для каждого компилятора.

Пример whatever.c

#include "whatever.h" 

int f(int a) { return a + 1; } 

И тогда вы можете включить «whatever.h» в любой другой .c файл и связать его с объектным файлом whatever.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 
$ 
+7

, возможно, вы захотите упомянуть защитников заголовков – luke

+0

@luke: Большое спасибо. Не знаю, что такое охранники. Теперь отправляемся в google. Еще раз спасибо. –

+0

@ luke: О! Понимаю. Хорошая точка зрения. Собираемся добавить их. –

2

Файлы заголовка могут содержать любой действительный код C, поскольку перед компиляцией они доставляются в блок компиляции предварительным процессором.

Если файл заголовка содержит функцию и включен несколькими файлами .c, каждый файл .c получит копию этой функции и создаст для нее символ. Компилятор будет жаловаться на дубликаты символов.

Технически возможно создавать функции static в файле заголовка для включения в несколько файлов .c. Хотя это, как правило, не выполняется, потому что он прерывается от соглашения, что код найден в .c файлах и объявления находятся в .h файлах.

См. Обсуждения в C/C++: Static function in header file, what does it mean? для более подробного объяснения.

Смежные вопросы