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

Объясните, в чем суть директив #ifndef/#define/#endif - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.95
Леонид ГаниполЯ
3 / 3 / 0
Регистрация: 01.08.2008
Сообщений: 65
04.08.2008, 18:37     Объясните, в чем суть директив #ifndef/#define/#endif #1
Не понял в чем суть директив:
C++
1
2
3
4
5
#ifndef ..
#define..
 
 
#endif
Объясните пожалуйста..это как - то связано с хедерами, но вот как ??
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
challengerr
43 / 36 / 2
Регистрация: 30.07.2008
Сообщений: 136
04.08.2008, 20:57     Объясните, в чем суть директив #ifndef/#define/#endif #2
#ifndef используется для предотвращения многократного включения заголовочных файлов или включения/исключения какого-то кода. Например, для платформы х86 может быть один код, для x64 другой. Для отладочной версии один код, для релиза - другой и т.д.

Код
#ifdef HEADER
код
#endif
Код
#if defined(HEADER)
код
#endif
используется для включения/исключения кода
Например:
Код
#if defined(DEBUG)
   printf("err: no operands\n");
#endif
#define используется для создания макросов.
Например:
Код
#define Msg(x) MessageBox(0,x,"t",MB_OK)
#define print(A) cout<<(A);
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) > (b) ? (b) : (a))
 
printf("%d\n",max(5,8));
Msg("5");
Леонид ГаниполЯ
3 / 3 / 0
Регистрация: 01.08.2008
Сообщений: 65
04.08.2008, 21:01  [ТС]     Объясните, в чем суть директив #ifndef/#define/#endif #3
так в чем +, я могу я раз написать инклуд и все? зачем многократное включение, 1 раз написал и все....если есть возможность обясните поподробнее, кста зачем пишут %d в принтф?
challengerr
43 / 36 / 2
Регистрация: 30.07.2008
Сообщений: 136
04.08.2008, 21:13     Объясните, в чем суть директив #ifndef/#define/#endif #4
Цитата Сообщение от Леонид ГаниполЯ Посмотреть сообщение
так в чем +, я могу я раз написать инклуд и все? зачем многократное включение, 1 раз написал и все....если есть возможность обясните поподробнее, кста зачем пишут %d в принтф?
В серьезных проектах все не так. Проект раскидан по множеству с/cpp файлов, в каждом из которых может быть указан один и тот же заголовочный файл. Чтобы код не дублировался в получаемом бинарнике, заголовочный файл должен быть включен только один раз.

%[flag] в это спецификация формата данных. В данном случае d означает, что функция должна подставить вместо %d целое десятичное число
Леонид ГаниполЯ
3 / 3 / 0
Регистрация: 01.08.2008
Сообщений: 65
04.08.2008, 21:16  [ТС]     Объясните, в чем суть директив #ifndef/#define/#endif #5
т.е. у мя например 3 срр файла, в одном я пишу инуклуд, а в других пишу 3 эти директивы и внутри них описываю весь класс к примеру
challengerr
43 / 36 / 2
Регистрация: 30.07.2008
Сообщений: 136
04.08.2008, 21:27     Объясните, в чем суть директив #ifndef/#define/#endif #6
include одного и того же заголовочного файла может быть нужен сразу в нескольких срр файлах. Класс описан в include. Реализация отдельных методов раскидана по разным cpp файлам.
Леонид ГаниполЯ
3 / 3 / 0
Регистрация: 01.08.2008
Сообщений: 65
04.08.2008, 21:49  [ТС]     Объясните, в чем суть директив #ifndef/#define/#endif #7
ммм, если у мя есть класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class WannaNow {
public:
WannaNow(): in1(a),int2(a) { }
void inkr1() {
 int1++;
};
void inkr2(){
int++;
};
private:
int int1, int2;
};
сохранненый в соотвествующем хедере include "WannaNow.h";

допустим в одном из срр файлов программы имеет смысл написать:
C++
1
2
3
4
5
#ifndef WANNANOW_H
#define WANNANOW_H
 
 
#endif
и вот в месте кода что имеет смысл написать, если мне нужна функция inkr1() ???
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2008, 00:30     Объясните, в чем суть директив #ifndef/#define/#endif
Еще ссылки по теме:

C++ Команды #ifndef #ifdef и #endif
C++ В чем суть этого задание?
Нюансы синтаксиса: #pragma once и ifndef define endif это одно и тоже? C++
C++ Объясните суть ссылок и указателей в коде

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

Или воспользуйтесь поиском по форуму:
Барра Белый Гепард
0 / 0 / 0
Регистрация: 04.08.2008
Сообщений: 8
05.08.2008, 00:30     Объясните, в чем суть директив #ifndef/#define/#endif #8
Очень рискованно добавлять IF директивы в код. Для .h они просто созданы, но больше нигде их пользовать не следует, разве что нужно менять базовые типы в зависимости от платформы
C++
1
2
3
4
5
#ifndef port 
typedef _Int64 Numb;
#else
typedef _Int32 Numb;
#endif
Во всех остальных случаях лучше так.
C++
1
2
3
4
5
6
const int PLATFORM = 1
...
if (PLATFORM) 
{
//Чё то специфическое
}
Хорошие компиляторы в этом месте прибьют или if или весь его блок без следа (никаких потерь). А вот в плане отлова ошибок с указателями такой способ предпочтительнее.
Почитай cassert.h - просветлит.
Yandex
Объявления
05.08.2008, 00:30     Объясните, в чем суть директив #ifndef/#define/#endif
Ответ Создать тему
Опции темы

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