Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

С++.Собственный хидер.Что нельзя?

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> С++.Собственный хидер.Что нельзя?
Имя
Сообщение << Старые топики   Новые топики >>
С++.Собственный хидер.Что нельзя? - 2008-04-11 20:39:48.530000   
Genco

Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
 Такое дело.Посетил меня один вопрос.Для удобства многие определения/включения/куски кода можно вынести в собственный хидер-файл.Естессно,перегружать кодом его не стоит.Но вот слышал я (спор был) что хидеры - эт не просто так,их "уметь писать" надо.А то лаги будут.Шо за? Попробовал.Что ни пихал туда - пахало(класс пихал,функцию…много чего). А что вообще хороший тон там оставить,а что совсем не стоит туда выносить? Не,ну если плохо компилятор настроить -INTERNAL COMPILER ERROR будет,а так то что?
Post #: 1
RE: С++.Собственный хидер.Что нельзя? - 2008-04-11 21:04:04.840000   
Mystic.asm

Сообщений: 53
Оценки: 0
Присоединился: 2007-06-17 18:19:29.466666
Вообще при юзании header файла следует соблюдать некоторые правила. Например, следует добавлять #ifndef … #define … #endif во избежании многократного включения. не рекомендуется в нем использовать using и using namespace (ведь это будет распространяться на все файлы, куда он включается, чего например "не ожидают" разработчики, использующие его, и может произойти конфликт имен). Насчет макросов несколько спорный вопрос, я например в хедарах их не объявляю (ну не нравятся мне они там). Обычно в хедере пишут только объявления классов\функций, с целью скрыть их реализацию.
Ну примерно так, если быстро и не вдумываясь :)
Post #: 2
RE: С++.Собственный хидер.Что нельзя? - 2008-04-11 21:15:20.946666   
Genco

Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
 Ну как бы…да)).А то мне загоняли про то что если есть там хоть строчка(!) исполняемого кода,это уже не есть гуд,просто аж вешаться надо.И прям так чел пугал,ниче слушать не хотел). Кстати,а в #ifndef как именно писать (имя файла я так понял) - в кавычках/скобках…? А то ругался компилятор,а смотреть лень было). Но вот блин,можно же класс с его функциями запихнуть! Как знал что чел гонит.
Post #: 3
RE: С++.Собственный хидер.Что нельзя? - 2008-04-11 21:21:53.610000   
Mystic.asm

Сообщений: 53
Оценки: 0
Присоединился: 2007-06-17 18:19:29.466666
В хедер класс с функциями пишут, чтобы функции были inline. Да и шаблонные классы написать нельзя в h и cpp (в новом стандарте точнее как-то можно, но он не компилится в библиотеку, точно не знаю в общем, так как в 2005 студии такое еще не поддерживалось). Т.е. шаблонные функции придется писать в хедере. Использование #ifndef :
#ifndef CHTO_UGODNO_BEZ_KAVI4EK
#define CHTO_UGODNO_BEZ_KAVI4EK
//Header
#endif //CHTO_UGODNO_BEZ_KAVI4EK
Post #: 4
RE: С++.Собственный хидер.Что нельзя? - 2008-04-11 22:07:27.426666   
Absurd

Сообщений: 335
Оценки: 0
Присоединился: 2007-08-24 13:14:11.566666
quote:

ORIGINAL: Genco
Ну как бы…да)).А то мне загоняли про то что если есть там хоть строчка(!) исполняемого кода,это уже не есть гуд,просто аж вешаться надо.

msvc++ может заинлайнить функцию, только если она написана в *.h файле, иначе не прокатит. Стандартом С++ допускаются линкеры которые умеют инлайнить на уровне объектного кода, но они существуют не на этой грешной земле.

Еще шаблоны функций и методы шаблонных классов надо писать в *.h файле, иначе они не будут развернуты со всеми возможными параметрами и линкер ругнется на отсутствующий символ. Существует (существовал ?) только один компилятор, который поддерживает export template, но это не msvc++ и не g++; Да и там это реализовано архикриво.

Еще вложенные #include надо минимизировать. Если есть класс Foo объявленный в "Foo.h", и в заголовке он используется, то лучше не инклудить "Foo.h", а написать предварительную декларацию -
class Foo; Foo* createFoo(); вместо
#include "Foo.h" Foo* createFoo();
Post #: 5
RE: С++.Собственный хидер.Что нельзя? - 2008-04-11 22:14:52.373333   
Absurd

Сообщений: 335
Оценки: 0
Присоединился: 2007-08-24 13:14:11.566666

quote:

ORIGINAL: Mystic.asm
в новом стандарте точнее как-то можно, но он не компилится в библиотеку, точно не знаю в общем, так как в 2005 студии такое еще не поддерживалось

Это и по старому стандарту 99-го года можно было, но это ошибка в стандарте. Саттер доказал в своей книжке что это в общем случае сделать невозможно, так как появятся противоречивые контексты компилирования.
Post #: 6
RE: С++.Собственный хидер.Что нельзя? - 2008-04-12 04:57:19.470000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
А время компилирования зависит (прогрессивно) от размера .cpp файла после препроцессорой обработки. Если много напихать в хэдеры, то файлы будут долше компилиться.
Post #: 7
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> С++.Собственный хидер.Что нельзя?







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.