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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.96
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
#1

Стражи включения - C++

31.08.2010, 17:23. Просмотров 3023. Ответов 6
Метки нет (Все метки)

Что значат эти строчки,

C++
1
2
3
4
#ifndef _CIRCL_H
#define _CIRCL_H
 
#endif  /* _CIRCL_H */
понял так:
C++
1
2
3
4
если не дефинирована _CIRCL_H
тогда дефинировать   _CIRCL_H
 
выходим/конец    _CIRCL_H
а зачем все это, в чем прикол?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
31.08.2010, 17:25     Стражи включения #2
bobromet, Защита от включения заголовочного файла более одного раза. Запомните это. Пригодится. Альтернатива:
C++
1
#pragma(once)
Некропостинг - нехорошо
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
31.08.2010, 17:29  [ТС]     Стражи включения #3
а как я могу его более одного раза включить и почему это плохо?
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
31.08.2010, 17:31     Стражи включения #4
bobromet, Плохо - это по определению. Ошибка компиляции. А два раза...
Ну например так - будет ошибка компиляции. А если раскоментить страж, то все будет ок.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//file.h
//страж тут 
//#ifndef _FILE_H_ 
//#define _FILE_H_
//some code
//#endif
 
//file.cpp
#include "file.h"
//some code
 
//main.cpp
#include "file.h"
//some code
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
31.08.2010, 17:39  [ТС]     Стражи включения #5
Хм как то не очень понятно. Я ведь хидер так и так должен каждый раз подключать и в main.cpp и в file.cpp.. что то запутался
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
31.08.2010, 17:40     Стражи включения #6
bobromet, один и тот же header может включатся в другие хедеры итд


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//1.h
#include "2.h"
#include "3.h"
#include "4.h"
................
 
//2.h
#include "3.h"
................
 
//main.cpp
#include "1.h"
 
int main( int argc,char** argv ){
...
}
main.cpp превратится в
#include "3.h" (полный текст 3.h)
.....................
#include "3.h" (полный текст 3.h)
#include "4.h" (полный текст 4.h)
.....................
int main( int,char** ){
...
}

то что было в 3.h включится два раза
если у вас стоят дефайны, то при включение внутри 2.h файла 3.h он не включится, тк для main.cpp define _3_H будет определен после включения внутри 1.h
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2010, 17:42     Стражи включения
Еще ссылки по теме:

Как избежать циклического включения заголовочных файлов? C++
C++ Как отловить события включения/выключения Windows?
Защита от повторного включения файла C++
C++ Класс с использованием включения
Объясните принцип защиты файлов от множественного включения C++

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

Или воспользуйтесь поиском по форуму:
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
31.08.2010, 17:42  [ТС]     Стражи включения #7
alex_x_x, Lavroff ясность полная, спасибо .)
Yandex
Объявления
31.08.2010, 17:42     Стражи включения
Ответ Создать тему
Опции темы

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