Ответить
17.03.2011, 23:15 #1
Гость
Avatar
Регистрация: 22.10.2010
Сообщений: 10
Карма: 0
Что такое define и для чего он нужен
Здравствуйте.

Вот я иногда встречаю программы с ключевиком define, но не совсем пойму его назначения. На этом сайте в программах я его ни разу не встречал. Объясните пожалуйста подробнее для чего нужен этот define. Если можно, то на примере. Спасибо
Реклама
18.03.2011, 21:10 #2
Ветеран
Avatar
Регистрация: 21.08.2010
Сообщений: 321
Карма: 19
Re: Что такое define и для чего он нужен
lex писал(а):
Здравствуйте.

Вот я иногда встречаю программы с ключевиком define, но не совсем пойму его назначения. На этом сайте в программах я его ни разу не встречал. Объясните пожалуйста подробнее для чего нужен этот define. Если можно, то на примере. Спасибо


Спасибо за вопрос. Сейчас попытаюсь подробнее на него ответить.

Сначала пишу пример использования, а затем уже будут разъяснения

//#define

#include <iostream>

using namespace std;

#define N 10

int main()
{
bool answer[N] = {1, 0, 0, 1, 1, 1, 0, 1, 1, 0};

for(int i = 0; i < N; i++)
if(answer[i])
    cout << "yes ";
else
    cout << "no ";

cout << "nnPress \"Enter\" for exit...";
cin.get();

return 0;
}


Ниже привожу второй вариант этой же программы, но без использования #define

//const

#include <iostream>

using namespace std;

int main()
{
const int N = 10;
bool answer[N] = {1, 0, 0, 1, 1, 1, 0, 1, 1, 0};

for(int i = 0; i < N; i++)
if(answer[i])
    cout << "yes ";
else
    cout << "no ";

cout << "nnPress \"Enter\" for exit...";
cin.get();

return 0;
}


Итак, в языке программирования Си с помощью макроопределения #define объявляют константу, т.е. значение, которое будет постоянным на все время выполнения программы. Как видите, в первой программе мы именно так и сделали: объявили константу, указывающую количество элементов в булевом массиве. Как вы знаете, размер массива должен быть обязательно константным, т.е. можно его указать с помощью объявленной ранее константы, либо вписать конкретную числовую константу в объявление. Первый способ, конечно же, лучше, т.к. более универсален (если вдруг надумаете менять размер массива, то не нужно будет менять числовые значения по всей программе). Немного отвлекся...продолжим..

Т.к. язык С++ еще называют расширенным Си (или Си с классами), то он сам по себе поддерживает все, что можно было делать в старом добром Си, поэтому, в принципе, в нем можно тоже для описания констант использовать это самое макроопределение #define, но оно считается устаревшим и поэтому практически не используется. В языке С++ для определения констант используют ключевое слово const, как показано во второй программе. Оно сообщает компилятору, что это константа.

В принципе, можете пользоваться любым определением для описания констант в ваших программах, но я бы, все же, рекомендовал использование const, хоть и говорят, что скорость доступа к константе, описанной с помощью #define несколько быстрее...на современных компьютерах это не играет роли.
18.03.2011, 21:16 #3
Ветеран
Avatar
Регистрация: 21.08.2010
Сообщений: 321
Карма: 19
Re: Что такое define и для чего он нужен
ua_fan писал(а):
и еще вопрос в продолжение... Почему иногда подключаемый файл в #include берут в кавычки? есть ли разница?


Где-то я в своих материалах сайта, если не ошибаюсь, то уже описывал эту разницу, но все же повторюсь...

Разница лишь в том, что когда вы подключаете стандартные заголовочные файлы, т.е. правильно будет писать

#include <string.h>


когда эти самые заголовочные файлы вы создаете сами (об этом я еще рассказу позже, когда буду писать главу про классы), то правильно будет писать так

#include "myHederFile.h"


при этом этот заголовочный файл (хэдер) должен находиться в корне проекта.

Вот, в принципе, и все :)
22.07.2013, 04:30 #4
Без ранга
Avatar
Регистрация: 22.07.2013
Сообщений: 1
Карма: 0
Re: Что такое define и для чего он нужен
Здравствуйте!
Подскажите пожалуйста. У меня небольшая проблема с переменной define.
Не знаю знакомы вы с CMS Drupal, но пользуюсь этой системой.
И вот собственно ошибка получается такая:

Notice: Undefined offset: 0 in comment_submit() (line 2197 of
/modules/comment/comment.module).

Код идет такой

(2197) /**
(2199) * Comment is published.
(2199) */
(2200) define('COMMENT_PUBLISHED', 1);

Не подскажите что можно поправить?
За ранее спасибо!
Ответить