Заголовочные файлы в C (Помогите разобраться)

Модератор: Модераторы разделов

Аватара пользователя
pipll
Сообщения: 234
Статус: Программист
ОС: Slackware 12

Заголовочные файлы в C

Сообщение pipll »

Помогите разобраться с включением файлов в программу на C (подождите кричать man #include и т.п., сейчас все объясню).
Такая проблема: учусь прогать на C, хочу некоторые функции упрятать в *.c файл, а потом подключать (через #include "*.h"), а вот что в *.h писать, хоть убейте, не знаю... Делать #include "*.c" как-то не кошерно, как и в *.h писать код...
В C++ все попроще было (с классами) - в *.h описание, а в *.c реализация, а вот как в C в *.h писать описания - не знаю...
Спасибо сказали:
Аватара пользователя
innkeeper
Сообщения: 110

Re: Заголовочные файлы в C

Сообщение innkeeper »

Да собственно делается абсолютно так же как и с C++

Делается файл: my_idea.c в котором содеражться нужные тебе функции, дальше файл my_idea.h где собственно находяться все объявлнеия функций:
void foo(int , char* );
и т. п.

Дальше есть варинты:
1) комплировать два файла всегда вместе
2) скомпилировать библиотеку и дальше включать её линковщиком

Первый случай выглядит примерно так:

Код: Выделить всё

$ gcc main.c my_idea.c -o program


Во втором случае можно сделать статическую библиотеку:

Код: Выделить всё

$ gcc -c my_idea.c
$ ar -r libmy_idea.a my_idea.o


И компилировать готовый продукт так:

Код: Выделить всё

$ gcc main.c libmy_idea.a -o program


Или скопировав libmy_idea.a в /usr/local/lib/ и после сделав:

Код: Выделить всё

# ldconfig


Компилировать примерно так:

Код: Выделить всё

$ gcc main.c -o program -lmy_idea
Спасибо сказали:
Аватара пользователя
pipll
Сообщения: 234
Статус: Программист
ОС: Slackware 12

Re: Заголовочные файлы в C

Сообщение pipll »

Для innkeeper:
Спасибо, понял...
Спасибо сказали:
boot
Сообщения: 289

Re: Заголовочные файлы в C

Сообщение boot »

Также как и в C++, только без классов. В заголовочных файлах обьявлять прототипы функций, определения #define, константные перменные, структуры, ну всё, что требуется для использования несколькими файлами. В *.c файлах писать тела этих функций и использовать определения в коде программы.
Ой, пока писал уже объяснили :)
Спасибо сказали:
n1tr0gen
Сообщения: 149

Re: Заголовочные файлы в C

Сообщение n1tr0gen »

Я обычно в *.c файле пишу собственно сам код, а в соответствующем ему *.h файле записываю (как extern) все переменные и функции, которые должны быть доступны в других *.c файлах программы. Такой подход называется модульным программированием. Но я так же часто вижу как люди помещают в заголовочные файлы не extern определения, а именно прототипы функций, объявления переменных. Объясните, что это за метод, в чем его преимущества и недостатки.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Заголовочные файлы в C

Сообщение t.t »

(n1tr0gen @ Суббота, 10 Сентября 2005, 11:13) писал(а):Но я так же часто вижу как люди помещают в заголовочные файлы не extern определения, а именно прототипы функций, объявления переменных.
Кстати, угадайте почему эти файлы называются заголовочными? ;)
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
d_n_k
Сообщения: 636
ОС: Gentoo GNU/Linux

Re: Заголовочные файлы в C

Сообщение d_n_k »

имхо, нет никакой разницы между прототипом и extern для функций.
extern использую только для переменных.

компилятору главное сказать что функция есть, а линкощик и так её найдет.
все сказанное есть имхо...
Спасибо сказали:
n1tr0gen
Сообщения: 149

Re: Заголовочные файлы в C

Сообщение n1tr0gen »

(d_n_k @ Суббота, 10 Сентября 2005, 13:56) писал(а):имхо, нет никакой разницы между прототипом и extern для функций.
extern использую только для переменных.

компилятору главное сказать что функция есть, а линкощик и так её найдет.

Я в свое время пытался то же самое объяснить компилятору, входящему в MS VS 5.0. То ли я что-то не так делал, то ли он откровенно тупил. Подробностей к сожалению уже не помню, чувствую что скорее первое ;)
Спасибо сказали:
Аватара пользователя
ilich
Сообщения: 156

Re: Заголовочные файлы в C

Сообщение ilich »

(n1tr0gen @ Суббота, 10 Сентября 2005, 11:13) писал(а):Но я так же часто вижу как люди помещают в заголовочные файлы не extern определения, а именно прототипы функций, объявления переменных. Объясните, что это за метод, в чем его преимущества и недостатки.


Я так делаю, когда пришу какую-нить билиотечку. Описание ф-ии в заголовочном файле, а код в so-файле. Обычно это делают, чтобы функция была видна в любом программном модуле.
!!! БЕРИ ОТ ЖИЗНИ ВСЕ !!!
Спасибо сказали: