Войти

Показать полную графическую версию : Зачем нужно писать *.h файлы


bilytur
07-09-2003, 01:27
Я уже 2 дня как начал осваивать этот великий и могучий язык, но некоторые вещи до меня не доходят.

Допустим я создал несколько функций.
Продублировал их определение в *.h
(Но я очень туп и сразу написать то что надо не могу)
Поэтому решил их изменить. Потом еще и еще...
И каждый раз нужно искать все это в *.h файлах чтобы востановить соответвие.
Когда это проделываешь несколко раз, то возникает мягко говоря легкое раздражение.

Неужели нельзя как то упростить.
Я понимаю что хидер файлы нужны компилятору, линкеру, или еще хрен знает чему, но почему человек то должен набирать два раза одно и тоже?
Где обещанная красота и лаконичность С++?
В конце концов почему не создать небольшую утилиту которая бы парсила *.cpp и автоматом выдирала бы определения в *.h, и затем подавала бы все это вместе компилеру?
Такая утилита имхо не очень сложна в реализации.
И почему такие очевидные вещи не пришли еще кому-то в голову.
Или я чего-то не понимаю? Так объясните...

bgg0408
07-09-2003, 01:44
to bilytur
Можно и юез хеадер-файла. Компилятору он НЕ нужен:)
Предположим, Вы пишите прогу из двух С файлов. В одном из них хотите использовать функции другого, но дублировать их описания в обоих файлах влом. Вот здесь может пригодится H-файл. Описываем функцию в этом файле, подключаем к обоис С и кайфуем :)
Прогу для ывдирания писать НЕ надо. Просто надо хеадеры писать :)

Исправлено: bgg0408, 2:45 7-09-2003

Megabizon
07-09-2003, 18:34
Никто тебе не запрещает писать реализацию и объявление в одном файле. Просто это как бы стандарт - разработчиков много и чтобы не было какой-либо путаницы делают так. Здесь эта тема уже обсуждалась, посмотри здесь
http://forum.oszone.net/topic.cgi?forum=18&topic=424

Исправлено: Megabizon, 19:35 7-09-2003

bilytur
08-09-2003, 03:24
Не мужики я понял что декларации нужны. В одном ли файле или в разных сути это не меняет. Я не понял зачем вообще их нужно писать. Вернее почему это нужно делать вручную.

Еше раз вкратце, идея такая,  допустим есть файл:

>---------file.cpp
#include "file.h"
int main(){
//...
func1(a,b,c);
func2(a,b,c,);
func3(a,b,c);
}

void  func1(int a , int b, int c){
//...
}
void  func2(int a , int b, int c){
//...
}
void  func3(int a , int b, int c){
//...
}
<---------eof

Запускаем нашу утилитку например так:
cpp2h   *.cpp   *.h

Получаем:
>---------file.h
int main();
void func1(int a , int b, int c);
void func2(int a , int b, int c);
void func3(int a , int b, int c);
<---------eof
Кстати строчку #include "file.h" можно добавлять куда угодно как обычно.

После этого ты вдруг понял что func1() должна возвращать значение, у func2() должно быть 4 аргумента, func3() вобще не нужна, а нужны func7() и func8()
ok. Изменяешь только один раз один файл: file.cpp и ВСЕ!

А если нашу утилитку запускать автоматически каждый раз перед компиляцией то можно кайфовать вобще всю оставшуюся жизнь. :)

зы: На этапе разработки это дело бы имхо сильно упростило бы написание. Ну а если дело дойдет до продажи *.obj. Там можно и вручную подкоректировать h-файлы. Вставить копирайты там и.т.д.

зызы: Возможно здесь закралась какя-то  ошибка?
зызызы: А может уже давно кто-то написал что-то подобное?




© OSzone.net 2001-2012