powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / #define vs. const
19 сообщений из 19, страница 1 из 1
#define vs. const
    #33860425
Фотография Bogdan1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем отличается запись
#define i 100
от записи
const int i 100;
?
...
Рейтинг: 0 / 0
#define vs. const
    #33860516
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первое, это в коде будет замена i на 100, второе - будет существовать переменная i со значением 100. Разница: Во втором случае можно будет передовать указатель на переменную.
...
Рейтинг: 0 / 0
#define vs. const
    #33861564
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhПервое, это в коде будет замена i на 100, второе - будет существовать переменная i со значением 100. Разница: Во втором случае можно будет передовать указатель на переменную.

Во втором случае есть более существенный плюс - ТИПИЗАЦИЯ... Которая в своё время тянет такую весчь как размерность (ну это и понятно)...Отсюда - бОльший контроль на этапе линковки. В умных книгах этот аспект обычно выделяют.

с уважением
(круглый)
...
Рейтинг: 0 / 0
#define vs. const
    #33861632
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0Во втором случае есть более существенный плюс - ТИПИЗАЦИЯ... Которая в своё время тянет такую весчь как размерность (ну это и понятно)...Отсюда - бОльший контроль на этапе линковки. В умных книгах этот аспект обычно выделяют.


Верно. Как-то я сам не догадался, хотя на эту тему мой соседний топик прыгает.
...
Рейтинг: 0 / 0
#define vs. const
    #33861742
Фотография Bogdan1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо
...
Рейтинг: 0 / 0
#define vs. const
    #33861766
выводы:)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я бы уточнил, что технически в случае define препроцессор перед компиляцией везде ищет i и заменяет на 100, во втором случае это почти обычная переменная. и уже отсюда можно делать все выводы:)
...
Рейтинг: 0 / 0
#define vs. const
    #33861769
выводы:)я бы уточнил, что технически в случае define препроцессор перед компиляцией везде ищет i и заменяет на 100

т.е. буквально обрабатывает текст, получает результат и уже его отправляет на компиляцию.
...
Рейтинг: 0 / 0
#define vs. const
    #34019248
Замечания, конечно, толковые: на счёт линкования и проч.
Однако, стоит заметить, что если памяти не так много (например в контроллере), то предпочтительнее использовать директиву #define, т.к. (как уже было сказано) место в драгоценной оперативке занимать не будет. Минус: нельзя будет это дело передать по ссылке (в таком случае - деваться некуда; выделяй место под константную переменную).
...
Рейтинг: 0 / 0
#define vs. const
    #34020184
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
#define vs. const
    #34021044
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чередник ОлегЗамечания, конечно, толковые: на счёт линкования и проч.
Однако, стоит заметить, что если памяти не так много (например в контроллере), то предпочтительнее использовать директиву #define, т.к. (как уже было сказано) место в драгоценной оперативке занимать не будет. Минус: нельзя будет это дело передать по ссылке (в таком случае - деваться некуда; выделяй место под константную переменную).

Минус - нельзя создовать переменную i.

Классика :) :
Код: plaintext
1.
#define i j
...
Рейтинг: 0 / 0
#define vs. const
    #34022133
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чередник Олег..Однако, стоит заметить, что если памяти не так много (например в контроллере), то предпочтительнее использовать директиву #define, т.к. (как уже было сказано) место в драгоценной оперативке занимать не будет....

в контроллере будет размещено не в памяти (ОЗУ), а во флэше (почуствуйте разницу)...В добавок отмечу, что если Вы пишете на сях -значит кристаллы достаточного объёма. А если на азме - то тодысь совсем другой коленкор и соответственно другие телодвижения (и если кристаллы там в 2 либо 4 кила флэша - то там совсем другие правила и хитрости)...

с уважением
(круглый)
...
Рейтинг: 0 / 0
#define vs. const
    #34024293
kolobok0 Чередник Олег..Однако, стоит заметить, что если памяти не так много (например в контроллере), то предпочтительнее использовать директиву #define, т.к. (как уже было сказано) место в драгоценной оперативке занимать не будет....

в контроллере будет размещено не в памяти (ОЗУ), а во флэше (почуствуйте разницу)...В добавок отмечу, что если Вы пишете на сях -значит кристаллы достаточного объёма. А если на азме - то тодысь совсем другой коленкор и соответственно другие телодвижения (и если кристаллы там в 2 либо 4 кила флэша - то там совсем другие правила и хитрости)...

с уважением
(круглый)

Дело не в том, что где располагается (на самом деле линкеру можно явно указать какую переменную в какой памяти хранить). Суть в том, что размер этой самой памяти - дай бог единицы мегабайт, а скорее всего, меньше метра. Поэтому приходится экономить, чтобы не увидить сообщения, типа rom_memory is full.
...
Рейтинг: 0 / 0
#define vs. const
    #34024342
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дефайны удобно использовать для связи с внешним миром... текущие настройки среды... версия... дата-время компилляции и т.п.
...
Рейтинг: 0 / 0
#define vs. const
    #34024539
выводы:)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чередник ОлегЗамечания, конечно, толковые: на счёт линкования и проч.
Однако, стоит заметить, что если памяти не так много (например в контроллере), то предпочтительнее использовать директиву #define, т.к. (как уже было сказано) место в драгоценной оперативке занимать не будет. Минус: нельзя будет это дело передать по ссылке (в таком случае - деваться некуда; выделяй место под константную переменную).

в контроллерах константы могут находиться не только в оперативке а в РОМе и тут уже смотря какая переменная (длина) и какие требования к конкретному куску кода.
...
Рейтинг: 0 / 0
#define vs. const
    #34024546
вопрос:)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чередник Олег
Дело не в том, что где располагается (на самом деле линкеру можно явно указать какую переменную в какой памяти хранить). Суть в том, что размер этой самой памяти - дай бог единицы мегабайт, а скорее всего, меньше метра. Поэтому приходится экономить, чтобы не увидить сообщения, типа rom_memory is full.

какая экономия???
данные где-то должны лежать, если это чар, то эффективней будет дефайн, т.к. сслыка больше места займёт, если не чар, то вопрос уже спорный, если это строка, то констатна будет эффективней.

микроконтроллеры с памятью в единицы мегов это наверное недавно появилось, помню года три назад 32 килослова РОМ и 4 кила РАМ, считалось дохрена.

а при памяти контроллера в мегабайт вообще эти разговоры особого смысла не имеют, т.к. там большая часть памяти будет забита не кодом, а данными,
хотя можно умудриться и забить кодом:)
...
Рейтинг: 0 / 0
#define vs. const
    #34026038
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чередник ОлегДело не в том, что где располагается (на самом деле линкеру можно явно указать какую переменную в какой памяти хранить). Суть в том, что размер этой самой памяти - дай бог единицы мегабайт, а скорее всего, меньше метра. Поэтому приходится экономить, чтобы не увидить сообщения, типа rom_memory is full.

а вот тут уважаемы - код в студию...и на каком МК это дышит...
хочеться например глянуть на данный МК и на код, который заставляет РАСПОЛОГАТЬСЯ в ОЗУ константы (речь шла выше об ОЗУ) и не нуна чистить бабушку


(круглый)
ЗЫ
Единицы мегабайт...кхм... вот при штамповки в тысячи штук изделия - используються гораздо меньше камни...например at89c4051 - там отродясь не было не ОЗУ, не ФЛЭША больше 4 килл (флэш)...
...
Рейтинг: 0 / 0
#define vs. const
    #34026043
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выводы:)....в контроллерах константы могут находиться не только в оперативке....

укажите пожалуйста команду для рассположения константы в ОЗУ...(не путать с флэшем!!!)

заранее сэнкс
(круглый)
...
Рейтинг: 0 / 0
#define vs. const
    #34051985
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
здесь дефайны выигрывают
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
#define ATTR_TAG_Description		"Description"
#define ATTR_TAG_Note		        "Note"
#define ATTR_TAG_Version		    "Version"
#define ATTR_TAG_Group		        "Group"

#define WTTR_TAG_Description		LATTR_TAG_Description
#define WTTR_TAG_Note		        LATTR_TAG_Note
#define WTTR_TAG_Version		    LATTR_TAG_Version
#define WTTR_TAG_Group		        LATTR_TAG_Group
...
Рейтинг: 0 / 0
#define vs. const
    #34052816
kolobok0 выводы:)....в контроллерах константы могут находиться не только в оперативке....

укажите пожалуйста команду для рассположения константы в ОЗУ...(не путать с флэшем!!!)

заранее сэнкс
(круглый)

Ну например:
#pragma section StandByRam address=0x80000 //beg_addr_ext_SRAM
#pragma use_section StandByRam data_safe

Т.е. при линковании, компилятору явно указывается в какой области памяти должна находиться переменная data_safe. А константа или нет - это не важно. Важно то, что мы чётко определили область её местонахождения. В случае, если этой самой области будет мало, то линкер даст ошибку, что типа такая-то область переполнена. В таком случае лезем в файл (в моём случае - Linker.dld) и смотрим, как мы распределили память.
------
MEMORY /*================ Распределение памяти ===========*/
{
rom_ISRV: org= 0x00000,len=0x00400 //табл.векторов ISR
rom_system: org= 0x00400,len=0x05000 //система Diab

ram: org= 0x80000,len=0x06000 //<= пишем сюда
//ну и дальше в таком же духе
}
------

P.S. микроконтроллер: Motorola MC68376
компилятоор: Diab Data D-CC, v4.2, 9 Aug 1998
никаких примочек типа ОС не используется, всё пишеться руками.
конечные изделия - штучные
SRAM: Atmel
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / #define vs. const
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]