Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> исключение повторных хедеров 
V
    Опции темы
Vetos
Дата 25.7.2009, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: нет
Всего: 4



Здравствуйте!
Есть у меня несколько хедеров которые используют одни и тежи include, получается что моя прога подключает их несколько раз тем самым увеличивая объем приложения или нет?


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
and277
Дата 25.7.2009, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



Имхо так не должно быть. 
PM MAIL   Вверх
jonie
Дата 25.7.2009, 18:19 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



Да, при компиляции препроцессор пытается включить текст хедеров, но в них может быть нечто вроде:
Код

#infdef __FILE1_H__
#define  __FILE1_H__
тут собственно некий код
#endif

либо
Код

#pragma once
тут код
что означает дословно: при повторном проходе по этому файлу препроцессором (второй раз сделан include) будет включено в итоговый хедер "пусто" и символы не будут объявлены дважды.
В общем это защита от повторного включения.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
and277
Дата 25.7.2009, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



jonie,  Поясни про эти куски кода. Где это можно поглядеть ? Это уже в объектном файле?  

PM MAIL   Вверх
Gordon
Дата 25.7.2009, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 9.7.2006

Репутация: 1
Всего: 6



Цитата(and277 @  25.7.2009,  19:30 Найти цитируемый пост)
Поясни про эти куски кода. Где это можно поглядеть ? Это уже в объектном файле?  


Это что-то вроде запрета повторного включения...


--------------------

  
     
PM MAIL WWW   Вверх
and277
Дата 25.7.2009, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



Gordon, все понял. Стормозил.
PM MAIL   Вверх
Vetos
Дата 25.7.2009, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: нет
Всего: 4



jonie, т.е. мне в каждом хедере надо написать так
Код

#infdef __FILE1_H__
#define  __FILE1_H__
тут собственно некий код
#endif



--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
Tobuk
Дата 25.7.2009, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



Цитата(Vetos @ 25.7.2009,  19:08)
jonie, т.е. мне в каждом хедере надо написать так
Код

#infdef __FILE1_H__
#define  __FILE1_H__
тут собственно некий код
#endif

Да, только вместо FILE1 имя твоего хедера.   
PM MAIL   Вверх
Vetos
Дата 25.7.2009, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: нет
Всего: 4



[яуоте=Тобук, 25.7.2009,  19:11, пост1929176]Да, только вместо ФИЛЕ1 имя твоего хедера.   [/яуоте]
Ясно, спасибо!!!

Там походу
Код

#ifndef



--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
Gordon
Дата 25.7.2009, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 9.7.2006

Репутация: 1
Всего: 6



Да,
Код

#ifndef



--------------------

  
     
PM MAIL WWW   Вверх
azesmcar
Дата 25.7.2009, 20:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Vetos @  25.7.2009,  19:08 Найти цитируемый пост)
мне в каждом хедере надо написать так

пара замечаний
Во первых - двойные подчеркивания убрать, во вторых - лучше писать так
Код

#pragma once
#ifndef FILE1_H_INCLUDED_
#define  FILE1_H_INCLUDED_
тут собственно некий код
#endif

с #pragma once программа будет компилироваться быстрее, но она не входит в стандарт C++ (т.е. может не поддерживаться некоторыми компиляторами). И все же, большинство компиляторов #pragma once поддерживают, а для тех, которые не поддерживают написан #ifndef.

Это сообщение отредактировал(а) azesmcar - 25.7.2009, 20:58
PM   Вверх
jonie
Дата 25.7.2009, 21:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



Цитата
Во первых - двойные подчеркивания убрать, во вторых - лучше писать такКод

#pragma once
#ifndef FILE1_H_INCLUDED_
#define  FILE1_H_INCLUDED_
тут собственно некий код
#endif

у кого какие стереотипы, тогда уж пишите так:

Код

#ifndef FILENAME_H_INCLUDED
#define FILENAME_H_INCLUDED

// MS compatible compilers support #pragma once
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
#endif

//код тут

#endif // #ifndef FILENAME_H_INCLUDED

по крайней мере так пишут в boost, а значит это работает везде)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
azesmcar
Дата 25.7.2009, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(jonie @  25.7.2009,  21:05 Найти цитируемый пост)
у кого какие стереотипы, тогда уж пишите так:

Насчет двойного подчеркивания - это не стереотипы, а этот вариант тоже вполне возможен, но по стандарту незнакомые #pragma игнорируются, так что можно писать с чистой совестью, ничего страшного не будет (максимум warning).

Добавлено через 3 минуты и 15 секунд
оп - ошибочка вышло, беру свой совет назад, до #ifndef -а ничего писать не надо.
мой совет остается в силе, но уже в таком виде
Код

#ifndef FILE1_H_INCLUDED_
#define  FILE1_H_INCLUDED_

#pragma once

тут собственно некий код
#endif

ну или с проверкой, как написал jonie.

Это сообщение отредактировал(а) azesmcar - 25.7.2009, 21:08
PM   Вверх
and277
Дата 26.7.2009, 05:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



Кому интересно почитайте еще эту тему 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0694 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.