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

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

05.07.2009, 13:29. Показов 46222. Ответов 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
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 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
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 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
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru