реклама на сайте
подробности

 
 
> C++: #define vs. const, Что целесообразнее применять?
haker_fox
сообщение Jun 22 2007, 01:58
Сообщение #1


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Здравствуйте! До недавнего времени я использовал только си. В настоящее время я стараюсь писать максимально на языке си++, правда мои старания пока ограничиваются классами и некоторыми другими возможностями этого языка. Суть моего вопроса: каким образом может сказаться использование только одних #define, вместо рекомендуемых const?
Просто для меня лично более понятно это:
Код
/* Valve's pin */
#define    VLV_TURN_LEFT_PIN        0
#define    VLV_TURN_RIGHT_PIN        1
#define    VLV_UP_PIN                2
#define VLV_DOWN_PIN                    3
#define    VLV_FORWARD_PIN                4
#define    VLV_BACK_PIN                    5
#define    VLV_OPEN_PIN                    6
#define    VLV_CLOSE_PIN                    7

Чем примерно такое:
Код
const int VLV_TURN_LEFT_PIN 0
и т.д.

В данном случае конечно можно использовать (как я правильно понял) enum.
Но мне нравятся дефайны. Может ли иметь это какие-либо неприятные последствия в будущем?
Заранее спасибо за ответы и сорри за ламерский вопрос...


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DRUID3
сообщение Jun 22 2007, 03:09
Сообщение #2


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Чивото я совсем не понял ничего в Вашем вопросе 07.gif . #define - это работа с препроцессором (ну даже не знаю как назвать, автоматическим текстовым редактором исходного кода программы, что ли). Т.е. используя такую директиву, Вы просто заменяете в "отправляемом на компиляцию" тексте программы VLV_TURN_LEFT_PIN на 0. Ни подо что не отводится память, подстановка никак не влияет и на время работы исполняемой программы.

А const int VLV_TURN_LEFT_PIN = 0; это переменная типа int с именем VLV_TURN_LEFT_PIN и равная "0" которую нельзя изменять. Она лежит в памяти (как во Flash так и в RAM во время исполнения).

Хотя странно что Вы пропустили знак "равно", может это какой-нить "неклассический" компилятор. 07.gif Но вобщем #define и const не кружатся в вечном танце диалектической борьбы, это как "овальный" и "серый" smile.gif да и по-моему, в С const есть очень давно.

А уж enum, да, это злобный агент C++. В "+ы" перечислениям ставят то, что при инициализации констант компилятор может выполнить проверку типов(1). А еще, поскольку перечисления - это типы, определенные пользователем то для них можно перегрузить операции (2)(по умолчанию как для int) и тем самым рискнуть попасть под расправу людей работающих над этим же проектом biggrin.gif ...


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jun 22 2007, 04:55
Сообщение #3


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(DRUID3 @ Jun 22 2007, 11:09) *
Чивото я совсем не понял ничего в Вашем вопросе 07.gif . #define - это работа с препроцессором (ну даже не знаю как назвать, автоматическим текстовым редактором исходного кода программы, что ли). Т.е. используя такую директиву, Вы просто заменяете в "отправляемом на компиляцию" тексте программы VLV_TURN_LEFT_PIN на 0. Ни подо что не отводится память, подстановка никак не влияет и на время работы исполняемой программы.

А const int VLV_TURN_LEFT_PIN = 0; это переменная типа int с именем VLV_TURN_LEFT_PIN и равная "0" которую нельзя изменять. Она лежит в памяти (как во Flash так и в RAM во время исполнения).

Хотя странно что Вы пропустили знак "равно", может это какой-нить "неклассический" компилятор. 07.gif Но вобщем #define и const не кружатся в вечном танце диалектической борьбы, это как "овальный" и "серый" smile.gif да и по-моему, в С const есть очень давно.

А уж enum, да, это злобный агент C++. В "+ы" перечислениям ставят то, что при инициализации констант компилятор может выполнить проверку типов(1). А еще, поскольку перечисления - это типы, определенные пользователем то для них можно перегрузить операции (2)(по умолчанию как для int) и тем самым рискнуть попасть под расправу людей работающих над этим же проектом biggrin.gif ...

Знак равно пропустил по невнимательности, конечно же он там должен быть... Я понимаю, что #define это работа с препроцессором, т.е. идет подстановка вместо макроса, того значения, которое определяет последний. Просто я читал в рекомендациях к этому языку, что следует использовать именно const. Только не понятно, какой в этом смысл...


--------------------
Выбор.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- haker_fox   C++: #define vs. const   Jun 22 2007, 01:58
- - Losik   основной смысл в том, что >>при инициализаци...   Jun 22 2007, 05:47
- - scifi   Цитата(haker_fox @ Jun 22 2007, 05:58) До...   Jun 22 2007, 05:47
- - dxp   Цитата(haker_fox @ Jun 22 2007, 08:58) Зд...   Jun 22 2007, 07:04
|- - zltigo   Цитата(dxp @ Jun 22 2007, 10:04) В С enum...   Jun 22 2007, 07:46
||- - dxp   Цитата(zltigo @ Jun 22 2007, 14:46) Ну не...   Jun 22 2007, 08:50
||- - zltigo   Цитата(dxp @ Jun 22 2007, 11:50) компилят...   Jun 22 2007, 11:05
||- - dxp   Цитата(zltigo @ Jun 22 2007, 18:05) С опц...   Jun 22 2007, 13:15
||- - zltigo   Цитата(dxp @ Jun 22 2007, 16:15) В С этог...   Jun 22 2007, 14:05
||- - dxp   Цитата(zltigo @ Jun 22 2007, 21:05) Как ...   Jun 22 2007, 14:19
||- - rezident   Цитата(dxp @ Jun 22 2007, 20:19) А в С от...   Jun 22 2007, 14:26
|||- - dxp   Цитата(rezident @ Jun 22 2007, 21:26) А р...   Jun 23 2007, 03:38
|||- - rezident   Цитата(dxp @ Jun 23 2007, 09:38) Если объ...   Jun 23 2007, 13:04
|||- - CaPpuCcino   Цитата(dxp @ Jun 23 2007, 07:38) Контроль...   Jun 23 2007, 20:06
||- - zltigo   Цитата(dxp @ Jun 22 2007, 17:19) Думается...   Jun 22 2007, 14:29
|- - CaPpuCcino   Цитата(dxp @ Jun 22 2007, 11:04) Код// fi...   Jun 22 2007, 18:26
- - HSC   Практически все что было сказано выше в этой ветке...   Jun 22 2007, 08:30
|- - zltigo   Цитата(HSC @ Jun 22 2007, 11:30) Представ...   Jun 22 2007, 08:45
- - XVR   Хочу добавить свои 5 коп. к всему вышеизложенному:...   Jun 22 2007, 09:31
- - sergeeff   Вообще подобные вопросы неплохо разложены в книге ...   Jun 23 2007, 21:32


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 00:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01394 секунд с 7
ELECTRONIX ©2004-2016