Помогите разобраться с включением файлов в программу на C (подождите кричать man #include и т.п., сейчас все объясню).
Такая проблема: учусь прогать на C, хочу некоторые функции упрятать в *.c файл, а потом подключать (через #include "*.h"), а вот что в *.h писать, хоть убейте, не знаю... Делать #include "*.c" как-то не кошерно, как и в *.h писать код...
В C++ все попроще было (с классами) - в *.h описание, а в *.c реализация, а вот как в C в *.h писать описания - не знаю...
Заголовочные файлы в C (Помогите разобраться)
Модератор: Модераторы разделов
-
innkeeper
- Сообщения: 110
Re: Заголовочные файлы в C
Да собственно делается абсолютно так же как и с C++
Делается файл: my_idea.c в котором содеражться нужные тебе функции, дальше файл my_idea.h где собственно находяться все объявлнеия функций:
void foo(int , char* );
и т. п.
Дальше есть варинты:
1) комплировать два файла всегда вместе
2) скомпилировать библиотеку и дальше включать её линковщиком
Первый случай выглядит примерно так:
Во втором случае можно сделать статическую библиотеку:
И компилировать готовый продукт так:
Или скопировав libmy_idea.a в /usr/local/lib/ и после сделав:
Компилировать примерно так:
Делается файл: 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
Для innkeeper:
Спасибо, понял...
Спасибо, понял...
-
boot
- Сообщения: 289
Re: Заголовочные файлы в C
Также как и в C++, только без классов. В заголовочных файлах обьявлять прототипы функций, определения #define, константные перменные, структуры, ну всё, что требуется для использования несколькими файлами. В *.c файлах писать тела этих функций и использовать определения в коде программы.
Ой, пока писал уже объяснили
Ой, пока писал уже объяснили
-
n1tr0gen
- Сообщения: 149
Re: Заголовочные файлы в C
Я обычно в *.c файле пишу собственно сам код, а в соответствующем ему *.h файле записываю (как extern) все переменные и функции, которые должны быть доступны в других *.c файлах программы. Такой подход называется модульным программированием. Но я так же часто вижу как люди помещают в заголовочные файлы не extern определения, а именно прототипы функций, объявления переменных. Объясните, что это за метод, в чем его преимущества и недостатки.
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Заголовочные файлы в C
Кстати, угадайте почему эти файлы называются заголовочными?(n1tr0gen @ Суббота, 10 Сентября 2005, 11:13) писал(а):Но я так же часто вижу как люди помещают в заголовочные файлы не extern определения, а именно прототипы функций, объявления переменных.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
d_n_k
- Сообщения: 636
- ОС: Gentoo GNU/Linux
Re: Заголовочные файлы в C
имхо, нет никакой разницы между прототипом и extern для функций.
extern использую только для переменных.
компилятору главное сказать что функция есть, а линкощик и так её найдет.
extern использую только для переменных.
компилятору главное сказать что функция есть, а линкощик и так её найдет.
все сказанное есть имхо...
-
n1tr0gen
- Сообщения: 149
Re: Заголовочные файлы в C
(d_n_k @ Суббота, 10 Сентября 2005, 13:56) писал(а):имхо, нет никакой разницы между прототипом и extern для функций.
extern использую только для переменных.
компилятору главное сказать что функция есть, а линкощик и так её найдет.
Я в свое время пытался то же самое объяснить компилятору, входящему в MS VS 5.0. То ли я что-то не так делал, то ли он откровенно тупил. Подробностей к сожалению уже не помню, чувствую что скорее первое
-
ilich
- Сообщения: 156
Re: Заголовочные файлы в C
(n1tr0gen @ Суббота, 10 Сентября 2005, 11:13) писал(а):Но я так же часто вижу как люди помещают в заголовочные файлы не extern определения, а именно прототипы функций, объявления переменных. Объясните, что это за метод, в чем его преимущества и недостатки.
Я так делаю, когда пришу какую-нить билиотечку. Описание ф-ии в заголовочном файле, а код в so-файле. Обычно это делают, чтобы функция была видна в любом программном модуле.
!!! БЕРИ ОТ ЖИЗНИ ВСЕ !!!