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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.95
Леонид ГаниполЯ
3 / 3 / 0
Регистрация: 01.08.2008
Сообщений: 65
#1

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

04.08.2008, 18:37. Просмотров 3901. Ответов 7
Метки нет (Все метки)

Не понял в чем суть директив:
C++
1
2
3
4
5
#ifndef ..
#define..
 
 
#endif
Объясните пожалуйста..это как - то связано с хедерами, но вот как ??
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2008, 18:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объясните, в чем суть директив #ifndef/#define/#endif (C++):

Назначение директив препроцессора: #ifndef, #define, #endif - C++
Объясните, что обозначают эти директивы? Заем это использовать в классах? #ifndef myclass #define myclass class someclass { ...

Нюансы синтаксиса: #pragma once и ifndef define endif это одно и тоже? - C++
Я недопонял #pragma once и ifndef define endif это одной и тоже?

Как влияет inline и обертка(#ifndef #define #endif) .h файла на компоновщик. - C++
Есть файл Point.h: #ifndef POINT_GUARD #define POINT_GUARD ...

Команды #ifndef #ifdef и #endif - C++
Помогите разобраться с командами #ifndef #endif и #ifndef в книге все как то не понятно объяснено или же лучше если у кого то есть видео на...

Объясните на словах суть задания - C++
Найти произведение элементов двумерного массива с четными номерами. Как понять что номер четный: по строке, по столбцу или по значению...

Объясните суть ссылок и указателей в коде - C++
Всем добрый день! В общем, есть код (не судите, что примера попроще я не подобрал, просто подумал, что лучше я спрошу прям на деле),...

7
challengerr
43 / 36 / 2
Регистрация: 30.07.2008
Сообщений: 136
04.08.2008, 20:57 #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");
0
Леонид ГаниполЯ
3 / 3 / 0
Регистрация: 01.08.2008
Сообщений: 65
04.08.2008, 21:01  [ТС] #3
так в чем +, я могу я раз написать инклуд и все? зачем многократное включение, 1 раз написал и все....если есть возможность обясните поподробнее, кста зачем пишут %d в принтф?
0
challengerr
43 / 36 / 2
Регистрация: 30.07.2008
Сообщений: 136
04.08.2008, 21:13 #4
Цитата Сообщение от Леонид ГаниполЯ Посмотреть сообщение
так в чем +, я могу я раз написать инклуд и все? зачем многократное включение, 1 раз написал и все....если есть возможность обясните поподробнее, кста зачем пишут %d в принтф?
В серьезных проектах все не так. Проект раскидан по множеству с/cpp файлов, в каждом из которых может быть указан один и тот же заголовочный файл. Чтобы код не дублировался в получаемом бинарнике, заголовочный файл должен быть включен только один раз.

%[flag] в это спецификация формата данных. В данном случае d означает, что функция должна подставить вместо %d целое десятичное число
0
Леонид ГаниполЯ
3 / 3 / 0
Регистрация: 01.08.2008
Сообщений: 65
04.08.2008, 21:16  [ТС] #5
т.е. у мя например 3 срр файла, в одном я пишу инуклуд, а в других пишу 3 эти директивы и внутри них описываю весь класс к примеру
0
challengerr
43 / 36 / 2
Регистрация: 30.07.2008
Сообщений: 136
04.08.2008, 21:27 #6
include одного и того же заголовочного файла может быть нужен сразу в нескольких срр файлах. Класс описан в include. Реализация отдельных методов раскидана по разным cpp файлам.
0
Леонид ГаниполЯ
3 / 3 / 0
Регистрация: 01.08.2008
Сообщений: 65
04.08.2008, 21:49  [ТС] #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() ???
0
Барра Белый Гепард
0 / 0 / 0
Регистрация: 04.08.2008
Сообщений: 8
05.08.2008, 00:30 #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 - просветлит.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2008, 00:30
Привет! Вот еще темы с ответами:

Операции сдвига, перегруженые функции. Объясните суть - C++
Люди, помогите плиз. Дали на летнюю практику задания, которые в семестре не делали впринципе(учили простой Си). Первое задание такое:...

Чем оличается define от const - C++
define A 5; и const a = 5; В первом случае идет замена в предпроцессоре... а во втором? и еще слышал что define оч редко стал...

Указатели - в чем суть? - C++
Кто нибидь может мне обястнить укасзатели в С++,ато я некак не врубаюсь.

Чем же макрос define так плох? - C++
После прочтения про директиву препроцессора define возник вопрос по поводу применения define, как функции: #define QQ (q) (q^q) Можно...


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
05.08.2008, 00:30
Ответ Создать тему
Опции темы

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