Зачем они *.h

Ответить
Аватара пользователя
fLANkeR

Зачем они *.h

Сообщение fLANkeR »

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

Re: Зачем они *.h

Сообщение fLANkeR »

если ты тоько начал программировать то объяснит будет довольно трудно.



такие файлы представляют собой своеобразные модули....(так unit в Pascal) туда записываются не тлько заголовки но и тела функций. на этапе компиляции эта самы тела переписываються в тело программы. после этого она компилируеться.



Я сейчас точно не помню этапы компиляции по

этому сори Изображение
Аватара пользователя
fLANkeR

Re: Зачем они *.h

Сообщение fLANkeR »

Смешно говорить но я не один месяц занимаюсь C.

А где о них можа прочитать.

Хочу через них писать.

Може хоть очень тяжело обьяснить все равно пойму.
Аватара пользователя
shurikan

Re: Зачем они *.h

Сообщение shurikan »

glassMonk

Объяснить нетрудно - писать долго...

Кратко говоря, это интерфейсная часть. Когда ты включаешь h-файл в c- или cpp-файл, компилятор узнаёт из него какие переменные и какого типа ты можешь использовать, какие функции можешь вызвать, какого типа значение они возвращают, сколько параметров и какого типа ожидают. Там могу быть объявлены классы и определены макросы. В общем это особенность языка программирования. В паскале каждый юнит может содержать две части: intreface  и implementation (опустим initialization и finalization). Так сказать два в одном - и интерфейсная часть и исполняемая. А в си эти части разделили и стали писать в разных файлах: исполняемую в файлах с расширением c или cpp (вроде исодник), а интерфейсную в файлах с расширением h (наверное от header). Если чего ещё - стучись. Здесь или на мыло... Изображение
Аватара пользователя
Megabizon

Re: Зачем они *.h

Сообщение Megabizon »

привет shurikan fLANkeR

да тоесть к пирмеру а пишу в test.c главную main()

а все остальные вынес в test.h,

только в test.c

#include "test.h"

да я правильно понял?

ps

не нужа мне тут паралели спаскалем проводить.
Аватара пользователя
Megabizon

Re: Зачем они *.h

Сообщение Megabizon »

Попробую я внести свою лепту...

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

Допустим, ты написал библиотеку каких-то функций или компонентов, и решил продавать их но не хочешь чтоб все знали алгоритм твоих решений, так вот ты компилишь их, получаешь obj и поставляешь покупателю h, в котором он может посмотреть объявление твоих функций, классов, чтобы правильно их использовать, и поставляешь вместо срр - obj, так как obj двоичный файл, то никто уже не сможет посмотреть реализацию, тем самым ты как бы сохраняешь свое ноу-хау и такая поставка зовется - без исходников.
Аватара пользователя
shurikan

Re: Зачем они *.h

Сообщение shurikan »

glassMonk

Мыслишь в правильном направлении. Этот test.h можно использовать в любом модуле, где будут использоваться функции, классы, переменные, макросы из test.c(pp), которые ты хотел бы, чтобы были использованы. В принципе, выражение

[cjde]#include "test.h"[/code] может быть заменено на этом самом месте в тексте содержимым test.h
Аватара пользователя
shurikan

Re: Зачем они *.h

Сообщение shurikan »

Сразу вопрос Megabizon

Так я могу обектные файлы компилить и без *.h?

Я как начал читать как другие пушут там такие конструкции выстраивают, c #if, #ifdef и тп.

В кратьсе я понял, всем большое спасибо.
Аватара пользователя
shurikan

Re: Зачем они *.h

Сообщение shurikan »

glassMonk


Цитата:



Так я могу обектные файлы компилить и без *.h?



В принципе - да, можешь. Если ты имеешь в виду, написание их тобой. Т.е. писать их или нет. Но невозможно обойтись без библиотек, а описание того, что ты из них будешь использовать, как раз и ноходится в этих самых *.h Что каксается #if, #ifdef и т.п. - это директивы условной компиляции.
Аватара пользователя
shurikan

Re: Зачем они *.h

Сообщение shurikan »

Всем спасибо. топик закрыт.
Ответить

Вернуться в «Программирование и базы данных»