Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/228: Рейтинг темы: голосов - 228, средняя оценка - 4.76
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390

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

05.07.2009, 13:29. Показов 46513. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Для чего нужен оператор 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????
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.07.2009, 13:29
Ответы с готовыми решениями:

Для чего нужен C++?
Уважаемые, я учу C++ уже 7 лет, зачем нужен C++?

Для чего нужен с++?
Я школьник, мне 16 лет, учусь в 10 классе, планирую поступить на факультет защиты информационных технологий. Сейчас начал изучать с++, не...

Для чего нужен break?
для чего нужен break?

35
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
06.07.2009, 14:04
Студворк — интернет-сервис помощи студентам
Для функций безопасней будет использовать не #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/program... _054.shtml
лентяи...
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
06.07.2009, 14:55  [ТС]
Цитата Сообщение от Vourhey Посмотреть сообщение
@lex, вот если бы ты хотел, ты бы сам все нашел:
http://www.citforum.ru/program... p_054.shtm
там не понятно написано

Добавлено через 35 секунд
Vourhey, лучший ответ нашел в своем учебнике
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
06.07.2009, 15:22
@lex, вот че ты его раньше не нашел? Все ведь можно найти. Нет ведь, я если за 10 секунд не нашел ответа, я лучше спрошу и буду привыкать к тому, что меня тащат за уши..эх..
Здесь везде тоже непонятно написано:
http://www.google.ru/search?hl... =&aq=f&oq=
?
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
06.07.2009, 20:01  [ТС]
Цитата Сообщение от Vourhey Посмотреть сообщение
Здесь везде тоже непонятно написано:
http://www.google.ru/search?hl... =&aq=f&oq=
ага там везде дельфи и С#
0
 Аватар для pigah
12 / 12 / 5
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
10.07.2009, 03:04
define - это именованная константа то есть тип определяется автоматически (не рекомендуется использовать);
const - это типизированная константа тип задается программистом (рекомендуется);
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
10.07.2009, 08:46
define - это именованная константа то есть тип определяется автоматически (не рекомендуется использовать);
Ну-ну.
Слово препроцессор тебе о чем нибудь говорит ?
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
17.07.2009, 17:17
Я бы предложил усовершенствовать файл t.h до правильного

C
1
2
3
4
5
6
7
/* Файл t.h */
#ifndef _T_H
#define _T_H
 
extern int func (int);
 
#endif
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
17.07.2009, 18:57
Цитата Сообщение от odip Посмотреть сообщение
Я бы предложил усовершенствовать файл t.h до правильного
До правильного совершенствовать его следует с объяснением, зачем это так, а так же с примером, когда возникает повторый инклюд
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
17.07.2009, 19:02
Я бы предложил усовершенствовать файл t.h до правильного

Code
1
2
3
4
5
6
7
/* Файл t.h */
#ifndef _T_H
#define _T_H
 
extern int func (int);
 
#endif
Обрамление h-файлов в такую синтаксическую конструкцию позволяет срабатывать коду внутри только один раз.
При большом кол-ве файлов или в случае вложенных h-файлов вы легко можете ошибиться и случайно или специально два раза включить h-файл.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
17.07.2009, 20:01
Лучший ответ Сообщение было отмечено как решение

Решение

Тут в соседней теме возник вопрос, зачем нужно *.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 - это условность. Инклюдить можно всё, что угодно
8
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
10.04.2010, 17:01
Для истории: статья теперь лежит тут
0
 Аватар для Zanoza
9 / 9 / 2
Регистрация: 16.03.2010
Сообщений: 44
10.04.2010, 20:27
Цитата Сообщение от Evg Посмотреть сообщение
Для истории: статья теперь лежит тут

Не по теме:

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

0
Evg
10.04.2010, 22:29

Не по теме:

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

0
 Аватар для Zanoza
9 / 9 / 2
Регистрация: 16.03.2010
Сообщений: 44
10.04.2010, 22:33
Цитата Сообщение от Evg Посмотреть сообщение

Не по теме:

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

Не по теме:

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

0
10.04.2010, 22:34  [ТС]

Не по теме:

Evg, +1 Zanoza-е...:)

0
1 / 1 / 0
Регистрация: 26.02.2020
Сообщений: 174
12.04.2020, 12:00
Хорошая тема : Спасибо ... много узнал
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.04.2020, 12:00

Для чего нужен rdstate()
Например cout&lt;&lt;&quot;sdxcfc&quot;&lt;&lt;output.rdstate(); Где output объект ostrstream

Для чего нужен символ \b?
для чего нужен символ \b??

Для чего нужен Sizeof
Вот строка memcpy(pMatrPr, pMatr, sizeof(double) * n * m); Это копирование исходной матрицы в преобразованную А что такое...

Для чего нужен EOF?
задание такое:написать программу, печатающую все вводимые символы в верхнем регистре, в строку выодится 16ричный и 8ричный код. #include...

Для чего нужен конструктор?
если несложно, то объясните для чего нужен конструктор? я прочитал, что он требуется для того,чтобы присваивать значение полям класса....


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

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru