Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
10 / 10 / 2
Регистрация: 01.02.2010
Сообщений: 317
1

Чем оличается define от const

01.02.2010, 19:20. Показов 4144. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
define A 5;
и
const a = 5;

В первом случае идет замена в предпроцессоре...
а во втором?
и еще слышал что define оч редко стал использоваться и это устаревшая вещь . правда ли это?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.02.2010, 19:20
Ответы с готовыми решениями:

Define vs const
возможно эта тема не раз поднималась, но я ее так и не нашел, какая из эти записей лучше #define...

Const #define
{ const int HOLFSDsize= 2;//#define HOLFSDsize 2 // m-угольник void HOLFSD() { int i, n,...

#define PI or static const float PI
Что лучьше обьясните? #define PI 3,14159265 или static const float PI=3,14159265;

Различия между #define и const
Собственно вопрос: в чем различия и что лучше использовать? Хотелось бы получить развернутый ответ...

13
Быдлокодер
512 / 298 / 85
Регистрация: 22.11.2009
Сообщений: 892
01.02.2010, 19:33 2
"const a = 5;"
Это бред сумасшедшего, во-первых.
Во-вторых, #define и есть - изменение директивы препроцессора, а второй - задание константы.
Отвечая на последний вопрос - например, матричным принтером пользуются и сейчас. Те же паспорта им и печатаются. Вопрос в том, а надо ли это в той области, в которой планируется применение.
1
542 / 447 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
01.02.2010, 19:40 3
C++
1
const int a = 5;
1
46 / 38 / 3
Регистрация: 14.12.2009
Сообщений: 272
01.02.2010, 19:42 4
Количеством букв и всё! difine - 6 букв, а const -5 )))))))))
1
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
01.02.2010, 19:45 5
C++
1
2
3
4
const int a = 5; // переменная к которой можно обратиться по имени
 
#define A 5
// сообщение компилятору "встретишь А замени его на 5"
В книге "Эффективное использование С++" (Скотт Майерс) первый совет - "Предпочитайте const и inline использованию #define.
Если кратко то допустим
C++
1
#define max(a, b) ((a) > (b) ? (a) : (b))
может серьёзно подвести если пользоваться так
C++
1
max(++a, b);
Если бы мы использовали функцию то мы бы сравнили a+1 и b
а define выполнит подобное:
C++
1
(++a) > (b) ? (++a) : (b)
Получится что a у нас возрастет хотя мы этого не хотели.

В любом случае #define это лишь инструмент и его использование зависит от обстоятельств, однако используя его вы должны понимать как оно действует и представлять как им нельзя пользоваться.
В случае с const все прозрачно... ведь это обычная переменная, основа основ, что тут сделаешь...
1
425 / 229 / 87
Регистрация: 25.03.2009
Сообщений: 744
01.02.2010, 20:10 6
Krist_ALL, насчёт Мейерса - всё же скачайте прочтите, вопросов будет меньше и не только по поводу define, ну и забудьте define если на С++ пишите) и вместо define max пишите функцию с таким именем чтобы уж наверняка.
0
insideone
01.02.2010, 21:34
  #7

Не по теме:

Хех, если уж советовать... посоветую Джефф Элджер "С++ for real programmers"("C++ : библиотека программиста"), стиль изложения больше понравился чем у Майерса, да и все как то более последовательно. Дает очень много!

0
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
01.02.2010, 22:11 8
Krist_ALL,

Чем оличается define от const

Цитата Сообщение от syd2010 Посмотреть сообщение
Количеством букв и всё! difine - 6 букв, а const -5 )))))))))
.. подписи не хватает: "Здесь был Бред" :lol:

константа отличается как минимум наличием типа и области видимости
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
01.02.2010, 22:17 9
Цитата Сообщение от Krist_ALL Посмотреть сообщение
define A 5;
и
const a = 5;

В первом случае идет замена в предпроцессоре...
а во втором?
и еще слышал что define оч редко стал использоваться и это устаревшая вещь . правда ли это?
В случае Си нельзя использовать константные объекты для описывания размерности массива. Т.е. на Си можно написать только так:

C
1
2
#define A 5
int x[A];
а вот на Си++ можно (и нужно) писать так:

C++
1
2
const int A = 5;
int x[A];
По поводу использования - можешь почитать тут
Если есть простая возможность обойтись без define - надо стараться обходиться
1
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
02.02.2010, 11:13 10
Цитата Сообщение от Evg Посмотреть сообщение
В случае Си нельзя использовать константные объекты для описывания размерности массива.
Это не совсем так.
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <stdlib.h>
 
const int size = 5;
 
int main()
{
    int array[size];
 
    printf("Hello world!\n");
    return 0;
}
GCC с опциями --std=c99, -pedantic и -pedantic-errors (код должен точно соответствовать Стандарту C99, любое отклонение от Стандарта трактовать как ошибку) компилирует с одним предупреждением - переменная array не используется (а это действительно так).
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
02.02.2010, 12:05 11
CheshireCat, всё-таки Си-99 это уже не просто Си. А точнее не то, что сейчас принято называть как "чистый Си". А автор темы наврядли имеет возможность работать с Си-99
0
depict1
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
02.02.2010, 12:21 12
Цитата Сообщение от Evg Посмотреть сообщение
В случае Си нельзя использовать константные объекты для описывания размерности массива
в С99 размерность массива можно задавать вообще без const
C++
1
2
int size = 5;
int array[size];
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
02.02.2010, 12:22 13
Хм, а что же тогда считать "чистым Си" ? Си времен Очаковских и покоренья Крыма? То есть тьфу, времен Кернигана и Ричи?

А почему бы, собссна, автору темы и не работать с C99 ? Компилятор GCC доступен для свободного скачивания, бесплатен, распространен под кучу платформ....... Да и LCC вроде как существует..... Что остается - религиозное неприятие современных стандартов? Книги, уже устаревшие на пару ледниковых периодов?
Или какие-то внутрифирменные стандарты кодирования, ограничивающие используемый инструментарий? До этого автору, кажется, еще далеко.....
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
02.02.2010, 13:34 14
Цитата Сообщение от CheshireCat Посмотреть сообщение
Хм, а что же тогда считать "чистым Си" ? Си времен Очаковских и покоренья Крыма? То есть тьфу, времен Кернигана и Ричи?
То, что называется "ansi C" или "C89" (если я ничего не путаю в терминологии). Этот стандарт поддерживают все вменяемые современные компиляторы

Цитата Сообщение от CheshireCat Посмотреть сообщение
А почему бы, собссна, автору темы и не работать с C99?
Автор - новичок. И работает на том, на чём работает. Насколько я знаю, компиляторы под винду от микрософта и борланда не поддерживают Си99. А если продолжать по той же логике, то почему бы ему сразу на Gnu-C не перейти? И снести свою ось и поставить линух
1
02.02.2010, 13:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.02.2010, 13:34
Помогаю со студенческими работами здесь

Const в параметрах. Перед чем нужно употребить const дабы обезопасить данные от изменения
const int Counter(const TSNum *Start) { int c=0; while(Start!=NULL){Start=Start-&gt;next;} ...

В чем отличие const и define ?
В чем-же?

#define и const
В чем их различия? Делая тест по подготовке к ЕГЭ, в заданиях части С были фрагменты кода, и...

Чем оличается Windows 7 Pro 32Bit OEM от Windows 7 64Bit OEM ?
чем оличается Microsoft Windows 7 Pro 32Bit OEM от Microsoft Windows 7 64Bit OEM Что означает...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru