С++.Собственный хидер.Что нельзя?
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
С++.Собственный хидер.Что нельзя? - 2008-04-11 20:39:48.530000
|
|
|
Genco
Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
|
Такое дело.Посетил меня один вопрос.Для удобства многие определения/включения/куски кода можно вынести в собственный хидер-файл.Естессно,перегружать кодом его не стоит.Но вот слышал я (спор был) что хидеры - эт не просто так,их "уметь писать" надо.А то лаги будут.Шо за? Попробовал.Что ни пихал туда - пахало(класс пихал,функцию…много чего). А что вообще хороший тон там оставить,а что совсем не стоит туда выносить? Не,ну если плохо компилятор настроить -INTERNAL COMPILER ERROR будет,а так то что?
|
|
|
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 (ведь это будет распространяться на все файлы, куда он включается, чего например "не ожидают" разработчики, использующие его, и может произойти конфликт имен). Насчет макросов несколько спорный вопрос, я например в хедарах их не объявляю (ну не нравятся мне они там). Обычно в хедере пишут только объявления классов\функций, с целью скрыть их реализацию. Ну примерно так, если быстро и не вдумываясь :)
|
|
|
RE: С++.Собственный хидер.Что нельзя? - 2008-04-11 21:15:20.946666
|
|
|
Genco
Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
|
Ну как бы…да)).А то мне загоняли про то что если есть там хоть строчка(!) исполняемого кода,это уже не есть гуд,просто аж вешаться надо.И прям так чел пугал,ниче слушать не хотел). Кстати,а в #ifndef как именно писать (имя файла я так понял) - в кавычках/скобках…? А то ругался компилятор,а смотреть лень было). Но вот блин,можно же класс с его функциями запихнуть! Как знал что чел гонит.
|
|
|
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
|
|
|
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();
|
|
|
RE: С++.Собственный хидер.Что нельзя? - 2008-04-11 22:14:52.373333
|
|
|
Absurd
Сообщений: 335
Оценки: 0
Присоединился: 2007-08-24 13:14:11.566666
|
quote:
ORIGINAL: Mystic.asm в новом стандарте точнее как-то можно, но он не компилится в библиотеку, точно не знаю в общем, так как в 2005 студии такое еще не поддерживалось Это и по старому стандарту 99-го года можно было, но это ошибка в стандарте. Саттер доказал в своей книжке что это в общем случае сделать невозможно, так как появятся противоречивые контексты компилирования.
|
|
|
RE: С++.Собственный хидер.Что нельзя? - 2008-04-12 04:57:19.470000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
А время компилирования зависит (прогрессивно) от размера .cpp файла после препроцессорой обработки. Если много напихать в хэдеры, то файлы будут долше компилиться.
|
|
|
|
|