Форум программистов, компьютерный форум CyberForum.ru

Как правильно включать хедеры? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
Svinina
 Аватар для Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
20.11.2011, 00:33     Как правильно включать хедеры? #1
Допустим, программа разбита на три исходника:
main.cpp - тут лежит main
abc.h - тут объявлен класс abc
abc.cpp - тут определены методы этого класса

Вопрос: куда стилистически корректнее включать хедеры? Все записать в abc.h, а в остальные файлы включать только его? Или в каждый исходник включать необходимый для него хедер, при том, что тот же iostream понадобится и в мэйне и в определениях методов? Или как-то иначе?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
prZzZ
Программист
 Аватар для prZzZ
108 / 88 / 5
Регистрация: 22.03.2011
Сообщений: 232
20.11.2011, 00:38     Как правильно включать хедеры? #2
Svinina, Здравствуйте...
В общем хидер включается там где он нужен...
Ну, а что касается отдельных библиотек, к примеру таких как MFC, то они диктуют свои правила...
Svinina
 Аватар для Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
20.11.2011, 00:44  [ТС]     Как правильно включать хедеры? #3
prZzZ, хорошо, ну а из моего примера <iostream> лучше в abc.h или в abc.cpp включить?
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
20.11.2011, 00:54     Как правильно включать хедеры? #4
Svinina, лучше включать заголовки только в те файлы, в которых они используются. Если в файле "abc.h" не упоминается ничего из заголовка <iostream>, то какой смысл его туда включать?
prZzZ
Программист
 Аватар для prZzZ
108 / 88 / 5
Регистрация: 22.03.2011
Сообщений: 232
20.11.2011, 00:57     Как правильно включать хедеры? #5
Svinina, лучше, конечно в abc.cpp, но это при том условии, если вы используете iostream для внутренних манипуляций, - в противном случае - если у вас методы принимают или отдают параметры iostream или у вас утилиты класса iostream или друзья и или online и т.д. - объявляете в abc.h
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
20.11.2011, 05:27     Как правильно включать хедеры? #6
Svinina, а еще лучше скомпилировать abc.h и abc.cpp в статическую библиотеку, abc.a, подключить abc.h в main.cpp и компилировать с библиотекой abc.a.
Bers
Заблокирован
20.11.2011, 06:56     Как правильно включать хедеры? #7
Цитата Сообщение от alkagolik Посмотреть сообщение
Svinina, а еще лучше скомпилировать abc.h и abc.cpp в статическую библиотеку, abc.a, подключить abc.h в main.cpp и компилировать с библиотекой abc.a.
Ага, что бы тут же начать ловить проблемы с оптимизаций, с конфликтами дебаг/релиз версий, с различиями между настройками компилятора целевого проекта и либы. Да?

И все эти телодвижения только ради того, что бы однократно не включать ручками abc.cpp

Абалденный подход !
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
20.11.2011, 11:33     Как правильно включать хедеры? #8
Цитата Сообщение от Svinina Посмотреть сообщение
abc.h - тут объявлен класс abc
abc.cpp - тут определены методы этого класса
в abc.h можно просто скопировать структуры и классы(без статистических библиотек ) из других хейдеров
в abc.cpp можно просто вручную объявить extern нужные функция и скопировать нужные структуры и классы
Bers
Заблокирован
20.11.2011, 12:16     Как правильно включать хедеры? #9
Цитата Сообщение от Van111 Посмотреть сообщение
в abc.h можно просто скопировать структуры и классы(без статистических библиотек ) из других хейдеров
Зачем в один хэдер копипастить что-то из других хэдэров?
Когда можно тупо приинклюдить.


Цитата Сообщение от Van111 Посмотреть сообщение
в abc.cpp можно просто вручную объявить extern нужные функция и скопировать нужные структуры и классы
А это зачем вообще может быть нужно?
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
20.11.2011, 12:48     Как правильно включать хедеры? #10
Цитата Сообщение от Bers Посмотреть сообщение
А это зачем вообще может быть нужно?
Цитата Сообщение от Bers Посмотреть сообщение
Зачем в один хэдер копипастить что-то из других хэдэров?
Когда можно тупо приинклюдить.
чтоб уменьшить объём
Bers
Заблокирован
20.11.2011, 12:50     Как правильно включать хедеры? #11
Цитата Сообщение от Van111 Посмотреть сообщение
чтоб уменьшить объём
Каким образом копипаста может уменьшить объем?
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
20.11.2011, 14:32     Как правильно включать хедеры? #12
Цитата Сообщение от prZzZ Посмотреть сообщение
в противном случае - если у вас методы принимают или отдают параметры iostream или у вас утилиты класса iostream или друзья и или online и т.д. - объявляете в abc.h
Можно использовать предварительную декларацию классов.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
20.11.2011, 16:45     Как правильно включать хедеры? #13
Цитата Сообщение от Bers Посмотреть сообщение
Ага, что бы тут же начать ловить проблемы с оптимизаций, с конфликтами дебаг/релиз версий, с различиями между настройками компилятора целевого проекта и либы. Да?
И все эти телодвижения только ради того, что бы однократно не включать ручками abc.cpp
Абалденный подход !
а вы включаете ручками new.cpp, cout.cpp, iterator_begin.cpp... (имена условные) ? Вы об их существовании даже не задумываетесь, потому что все они собраны в библиотеки.
fasked
20.11.2011, 16:52
  #14

Не по теме:

Цитата Сообщение от alkagolik Посмотреть сообщение
а вы включаете ручками new.cpp, cout.cpp, iterator_begin.cpp... (имена условные) ? Вы об их существовании даже не задумываетесь, потому что все они собраны в библиотеки.
Спасибо, поржал

Bers
Заблокирован
20.11.2011, 17:04     Как правильно включать хедеры? #15
Цитата Сообщение от alkagolik Посмотреть сообщение
а вы включаете ручками new.cpp, cout.cpp, iterator_begin.cpp... (имена условные) ? Вы об их существовании даже не задумываетесь, потому что все они собраны в библиотеки.
А вы уверены, что озвученные файлы вообще существуют?
Я сделаю вам прозрачный намек: стандартная библиотека шаблонов чуть меньше чем полностью реализована на шаблонах. Которым не нужны *.cpp

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

В то время, как в целевом проекте вы будите лазить по всей его архитектуре сверху донизу и обратно, по 100500 раз меняя то одно, то другое, то третье.

А ловить баги, и вносить изменения в уже скомпилированном коде, в котором нельзя просто так пошариться - это очень, очень, очень мега неудобно.

Одно дело цеплять к проекту уже протестированную и отлаженную библиотеку, в которую в принципе никаких изменений никто уже вносить не будит. И совсем другое - прицеплять скомпилированные части собственного проекта, а потом афигиевать от привалившей кучи "удобств".
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
20.11.2011, 17:50     Как правильно включать хедеры? #16
alkagolik, да, их включают ручками. Один раз. А потом используют make. Приколись.

(Естественно, речь не о стандартных библиотеках, а о своих файлах.)
Bers
Заблокирован
20.11.2011, 18:17     Как правильно включать хедеры? #17
Цитата Сообщение от volovzi Посмотреть сообщение
да, их включают ручками.
Вот это, кстати, реально вымораживает. Почему не сделали так, что б одноименные с хэдэрами спп автоматически втыкались в солюшн? Как это было реализованно в CodeWarrior.
Столько удобств бы сразу появилось
Svinina
 Аватар для Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
20.11.2011, 18:20  [ТС]     Как правильно включать хедеры? #18
Цитата Сообщение от Bers Посмотреть сообщение
Вот это, кстати, реально вымораживает. Почему не сделали так, что б одноименные с хэдэрами спп автоматически втыкались в солюшн? Как это было реализованно в CodeWarrior.
Столько удобств бы сразу появилось
Ну где-то втыкаются ИДЕшкой, как в том же КуТ.
Bers
Заблокирован
20.11.2011, 18:21     Как правильно включать хедеры? #19
Цитата Сообщение от Svinina Посмотреть сообщение
Ну где-то втыкаются ИДЕшкой, как в том же КуТ.
Нуууу... где то. Мне не над "где-то", мне над в студии.
Сходи к Билли Гейццу, скажи, что б исправили.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2011, 18:25     Как правильно включать хедеры?
Еще ссылки по теме:

В каких случаях необходимо включать include string C++
Создать структуру, которая будет включать в себя какой-то набор структур-компонент C++
C++ Как правильно вписать функцию в h-файл и правильно её отразить в основной функции?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
20.11.2011, 18:25     Как правильно включать хедеры? #20
Bers, странно. Обычно в средах это как раз делается автоматически. Неужели в МСе этого нет? Ужас.
Yandex
Объявления
20.11.2011, 18:25     Как правильно включать хедеры?
Ответ Создать тему
Опции темы

Текущее время: 19:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru