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

Для чего нужен define? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 176, средняя оценка - 4.74
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
05.07.2009, 13:29     Для чего нужен define? #1
Для чего нужен оператор define?
например код


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#define N 20            /* сколько первых чисел посчитать */
 
void main(){
    int fibs[N], index;
 
    fibs[0] = 1;    /* индексы отсчитываются с нуля!!! */
    fibs[1] = 1;
 
    /* Тут показано, что индекс элемента массива может вычисляться */
 
    for(index=2; index < N; index++)
        fibs[index] = fibs[index-1] + fibs[index-2];
 
    /* Распечатка в обратном порядке */
    for(index = N-1; index >= 0; index--)
        printf("%d-ое число Фибоначчи есть %d\n",
            index+1,                   fibs[index]);
}
 
Здесь мы видим новый для нас оператор #define
Он задает текстуальную ЗАМЕНУ слова N на слово 20,
в данном случае просто являясь эквивалентом
 
    const int N = 20;



неьзя ли edfine удалить и вместо N написать 20????
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2009, 13:29     Для чего нужен define?
Посмотрите здесь:

C++ для чего нужен символ \b
Прототип функции.Для чего нужен C++
Для чего нужен С/С++ и как ним пользоваться? C++
C++ Для чего нужен EOF?
Для чего нужен с++? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6469 / 2244 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
06.07.2009, 14:04     Для чего нужен define? #21
Для функций безопасней будет использовать не #define, а делать обычные функции. Можно inline. Так как, это убережет нас при проверке типов входящих переменных. Например макрос позволит сделать так:
C
1
2
#define MIN(a, b) a<b?a:b
   printf("%d\n", MIN("five",3));
Хотя, и выдаст предупреждение. Тем самым, определив свою функцию принимающую, например, только int, мы обезопасим себя от некоторых проблем (не только указанной выше) связанных с макроопределениями. Хотя, конечно, что использовать лучше зависит от контекста.

Добавлено через 1 минуту 28 секунд
@lex, вот если бы ты хотел, ты бы сам все нашел:
http://www.citforum.ru/programming/c.../cpp_054.shtml
лентяи...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
06.07.2009, 14:55  [ТС]     Для чего нужен define? #22
Цитата Сообщение от Vourhey Посмотреть сообщение
@lex, вот если бы ты хотел, ты бы сам все нашел:
http://www.citforum.ru/programming/c.../cpp_054.shtm
там не понятно написано

Добавлено через 35 секунд
Vourhey, лучший ответ нашел в своем учебнике
Vourhey
Почетный модератор
6469 / 2244 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
06.07.2009, 15:22     Для чего нужен define? #23
@lex, вот че ты его раньше не нашел? Все ведь можно найти. Нет ведь, я если за 10 секунд не нашел ответа, я лучше спрошу и буду привыкать к тому, что меня тащат за уши..эх..
Здесь везде тоже непонятно написано:
http://www.google.ru/search?hl=ru&ne...A&lr=&aq=f&oq=
?
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
06.07.2009, 20:01  [ТС]     Для чего нужен define? #24
Цитата Сообщение от Vourhey Посмотреть сообщение
Здесь везде тоже непонятно написано:
http://www.google.ru/search?hl=ru&ne...A&lr=&aq=f&oq=
ага там везде дельфи и С#
pigah
 Аватар для pigah
12 / 12 / 2
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
10.07.2009, 03:04     Для чего нужен define? #25
define - это именованная константа то есть тип определяется автоматически (не рекомендуется использовать);
const - это типизированная константа тип задается программистом (рекомендуется);
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
10.07.2009, 08:46     Для чего нужен define? #26
define - это именованная константа то есть тип определяется автоматически (не рекомендуется использовать);
Ну-ну.
Слово препроцессор тебе о чем нибудь говорит ?
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
17.07.2009, 17:17     Для чего нужен define? #27
Я бы предложил усовершенствовать файл t.h до правильного

C
1
2
3
4
5
6
7
/* Файл t.h */
#ifndef _T_H
#define _T_H
 
extern int func (int);
 
#endif
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16843 / 5264 / 323
Регистрация: 30.03.2009
Сообщений: 14,159
Записей в блоге: 26
17.07.2009, 18:57     Для чего нужен define? #28
Цитата Сообщение от odip Посмотреть сообщение
Я бы предложил усовершенствовать файл t.h до правильного
До правильного совершенствовать его следует с объяснением, зачем это так, а так же с примером, когда возникает повторый инклюд
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
17.07.2009, 19:02     Для чего нужен define? #29
Я бы предложил усовершенствовать файл t.h до правильного

Код
/* Файл t.h */
#ifndef _T_H
#define _T_H
 
extern int func (int);
 
#endif
Обрамление h-файлов в такую синтаксическую конструкцию позволяет срабатывать коду внутри только один раз.
При большом кол-ве файлов или в случае вложенных h-файлов вы легко можете ошибиться и случайно или специально два раза включить h-файл.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16843 / 5264 / 323
Регистрация: 30.03.2009
Сообщений: 14,159
Записей в блоге: 26
17.07.2009, 20:01     Для чего нужен define? #30
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Тут в соседней теме возник вопрос, зачем нужно *.h файлы использовать, а потому вкратце добавлю то, как работает директива #include

#include ничего умного не делает, она целиком подставляет файл, который передан параметром директиве. Т.е. если мы имеем исходники

C
1
2
3
4
5
6
/* Файл t1.c */
#include "t.h"
int main (void)
{
  return func (1);
}
C
1
2
3
4
5
6
7
/* Файл t2.c */
#include "t.h"
int
func (int x)
{
  return x;
}
C
1
2
/* Файл t.h */
extern int func (int);
То после препроцессирования файла t1.c получим код:

C
1
2
3
4
5
6
 <--- комментарии удаляются на этапе препроцессирования
extern int func (int); <--- сюда подставилось содержимое файла t.h
int main (void)
{
  return func (1);
}
а после препроцессирования t2.c вот такой:

C
1
2
3
4
5
6
extern int func (int);
int
func (int x)
{
  return x;
}
Таким образом, описав что-то в *.h файле, это что-то попадает на трансляцию всех модулей, обеспечиывая "одинаковость". То, что файл имеет расширение *.h - это условность. Инклюдить можно всё, что угодно
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16843 / 5264 / 323
Регистрация: 30.03.2009
Сообщений: 14,159
Записей в блоге: 26
10.04.2010, 17:01     Для чего нужен define? #31
Для истории: статья теперь лежит тут
Zanoza
 Аватар для Zanoza
9 / 9 / 1
Регистрация: 16.03.2010
Сообщений: 44
10.04.2010, 20:27     Для чего нужен define? #32
Цитата Сообщение от Evg Посмотреть сообщение
Для истории: статья теперь лежит тут

Не по теме:

попробуй написать учебник ,с такой стилистикой - у тебя будет огромный успех! это говорит тебе преподаватель(правда не айтишник)

Evg
10.04.2010, 22:29
  #33

Не по теме:

Статья по узкоспециализированной теме и учебник по широкой теме - две слишком разные вещи. Написал я эту статью в первую очередь потому, что ещё нигде не видел вменяемого описания работы препроцессора. К тому же статью я до сих пор не закончил. Когда "не идёт" - уж лучше я ничего не напишу, чем напишу плохо. Но как-нибудь соберусь с мыслями и закончу. А учебник при таком подходе будет готов не раньше следующего столетия

Zanoza
 Аватар для Zanoza
9 / 9 / 1
Регистрация: 16.03.2010
Сообщений: 44
10.04.2010, 22:33     Для чего нужен define? #34
Цитата Сообщение от Evg Посмотреть сообщение

Не по теме:

Статья по узкоспециализированной теме и учебник по широкой теме - две слишком разные вещи. Написал я эту статью в первую очередь потому, что ещё нигде не видел вменяемого описания работы препроцессора. К тому же статью я до сих пор не закончил. Когда "не идёт" - уж лучше я ничего не напишу, чем напишу плохо. Но как-нибудь соберусь с мыслями и закончу. А учебник при таком подходе будет готов не раньше следующего столетия

Не по теме:

живи сто лет,друг!
да и я - подожду

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2010, 22:34     Для чего нужен define?
Еще ссылки по теме:

C++ Для чего нужен шаблон <typename T>
Объясните для чего нужен конструктор C++
C++ Виртуальный деструктор, для чего нужен?

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

Или воспользуйтесь поиском по форуму:
^Tecktonik_KiLLeR
10.04.2010, 22:34  [ТС]     Для чего нужен define?
  #35

Не по теме:

Evg, +1 Zanoza-е...

Yandex
Объявления
10.04.2010, 22:34     Для чего нужен define?
Ответ Создать тему
Опции темы

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