|
|
|
#define vs. const
|
|||
|---|---|---|---|
|
#18+
Чем отличается запись #define i 100 от записи const int i 100; ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2006, 12:48 |
|
||
|
#define vs. const
|
|||
|---|---|---|---|
|
#18+
Первое, это в коде будет замена i на 100, второе - будет существовать переменная i со значением 100. Разница: Во втором случае можно будет передовать указатель на переменную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2006, 13:10 |
|
||
|
#define vs. const
|
|||
|---|---|---|---|
|
#18+
AkhПервое, это в коде будет замена i на 100, второе - будет существовать переменная i со значением 100. Разница: Во втором случае можно будет передовать указатель на переменную. Во втором случае есть более существенный плюс - ТИПИЗАЦИЯ... Которая в своё время тянет такую весчь как размерность (ну это и понятно)...Отсюда - бОльший контроль на этапе линковки. В умных книгах этот аспект обычно выделяют. с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2006, 16:39 |
|
||
|
#define vs. const
|
|||
|---|---|---|---|
|
#18+
kolobok0Во втором случае есть более существенный плюс - ТИПИЗАЦИЯ... Которая в своё время тянет такую весчь как размерность (ну это и понятно)...Отсюда - бОльший контроль на этапе линковки. В умных книгах этот аспект обычно выделяют. Верно. Как-то я сам не догадался, хотя на эту тему мой соседний топик прыгает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2006, 16:54 |
|
||
|
#define vs. const
|
|||
|---|---|---|---|
|
#18+
я бы уточнил, что технически в случае define препроцессор перед компиляцией везде ищет i и заменяет на 100, во втором случае это почти обычная переменная. и уже отсюда можно делать все выводы:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2006, 17:30 |
|
||
|
#define vs. const
|
|||
|---|---|---|---|
|
#18+
выводы:)я бы уточнил, что технически в случае define препроцессор перед компиляцией везде ищет i и заменяет на 100 т.е. буквально обрабатывает текст, получает результат и уже его отправляет на компиляцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2006, 17:31 |
|
||
|
#define vs. const
|
|||
|---|---|---|---|
|
#18+
Замечания, конечно, толковые: на счёт линкования и проч. Однако, стоит заметить, что если памяти не так много (например в контроллере), то предпочтительнее использовать директиву #define, т.к. (как уже было сказано) место в драгоценной оперативке занимать не будет. Минус: нельзя будет это дело передать по ссылке (в таком случае - деваться некуда; выделяй место под константную переменную). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2006, 15:09 |
|
||
|
#define vs. const
|
|||
|---|---|---|---|
|
#18+
Чередник ОлегЗамечания, конечно, толковые: на счёт линкования и проч. Однако, стоит заметить, что если памяти не так много (например в контроллере), то предпочтительнее использовать директиву #define, т.к. (как уже было сказано) место в драгоценной оперативке занимать не будет. Минус: нельзя будет это дело передать по ссылке (в таком случае - деваться некуда; выделяй место под константную переменную). Минус - нельзя создовать переменную i. Классика :) : Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2006, 10:09 |
|
||
|
#define vs. const
|
|||
|---|---|---|---|
|
#18+
Чередник Олег..Однако, стоит заметить, что если памяти не так много (например в контроллере), то предпочтительнее использовать директиву #define, т.к. (как уже было сказано) место в драгоценной оперативке занимать не будет.... в контроллере будет размещено не в памяти (ОЗУ), а во флэше (почуствуйте разницу)...В добавок отмечу, что если Вы пишете на сях -значит кристаллы достаточного объёма. А если на азме - то тодысь совсем другой коленкор и соответственно другие телодвижения (и если кристаллы там в 2 либо 4 кила флэша - то там совсем другие правила и хитрости)... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2006, 13:52 |
|
||
|
#define vs. const
|
|||
|---|---|---|---|
|
#18+
kolobok0 Чередник Олег..Однако, стоит заметить, что если памяти не так много (например в контроллере), то предпочтительнее использовать директиву #define, т.к. (как уже было сказано) место в драгоценной оперативке занимать не будет.... в контроллере будет размещено не в памяти (ОЗУ), а во флэше (почуствуйте разницу)...В добавок отмечу, что если Вы пишете на сях -значит кристаллы достаточного объёма. А если на азме - то тодысь совсем другой коленкор и соответственно другие телодвижения (и если кристаллы там в 2 либо 4 кила флэша - то там совсем другие правила и хитрости)... с уважением (круглый) Дело не в том, что где располагается (на самом деле линкеру можно явно указать какую переменную в какой памяти хранить). Суть в том, что размер этой самой памяти - дай бог единицы мегабайт, а скорее всего, меньше метра. Поэтому приходится экономить, чтобы не увидить сообщения, типа rom_memory is full. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2006, 23:18 |
|
||
|
#define vs. const
|
|||
|---|---|---|---|
|
#18+
Дефайны удобно использовать для связи с внешним миром... текущие настройки среды... версия... дата-время компилляции и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2006, 01:45 |
|
||
|
#define vs. const
|
|||
|---|---|---|---|
|
#18+
Чередник ОлегЗамечания, конечно, толковые: на счёт линкования и проч. Однако, стоит заметить, что если памяти не так много (например в контроллере), то предпочтительнее использовать директиву #define, т.к. (как уже было сказано) место в драгоценной оперативке занимать не будет. Минус: нельзя будет это дело передать по ссылке (в таком случае - деваться некуда; выделяй место под константную переменную). в контроллерах константы могут находиться не только в оперативке а в РОМе и тут уже смотря какая переменная (длина) и какие требования к конкретному куску кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2006, 14:36 |
|
||
|
#define vs. const
|
|||
|---|---|---|---|
|
#18+
Чередник Олег Дело не в том, что где располагается (на самом деле линкеру можно явно указать какую переменную в какой памяти хранить). Суть в том, что размер этой самой памяти - дай бог единицы мегабайт, а скорее всего, меньше метра. Поэтому приходится экономить, чтобы не увидить сообщения, типа rom_memory is full. какая экономия??? данные где-то должны лежать, если это чар, то эффективней будет дефайн, т.к. сслыка больше места займёт, если не чар, то вопрос уже спорный, если это строка, то констатна будет эффективней. микроконтроллеры с памятью в единицы мегов это наверное недавно появилось, помню года три назад 32 килослова РОМ и 4 кила РАМ, считалось дохрена. а при памяти контроллера в мегабайт вообще эти разговоры особого смысла не имеют, т.к. там большая часть памяти будет забита не кодом, а данными, хотя можно умудриться и забить кодом:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2006, 14:46 |
|
||
|
#define vs. const
|
|||
|---|---|---|---|
|
#18+
Чередник ОлегДело не в том, что где располагается (на самом деле линкеру можно явно указать какую переменную в какой памяти хранить). Суть в том, что размер этой самой памяти - дай бог единицы мегабайт, а скорее всего, меньше метра. Поэтому приходится экономить, чтобы не увидить сообщения, типа rom_memory is full. а вот тут уважаемы - код в студию...и на каком МК это дышит... хочеться например глянуть на данный МК и на код, который заставляет РАСПОЛОГАТЬСЯ в ОЗУ константы (речь шла выше об ОЗУ) и не нуна чистить бабушку (круглый) ЗЫ Единицы мегабайт...кхм... вот при штамповки в тысячи штук изделия - используються гораздо меньше камни...например at89c4051 - там отродясь не было не ОЗУ, не ФЛЭША больше 4 килл (флэш)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2006, 14:08 |
|
||
|
#define vs. const
|
|||
|---|---|---|---|
|
#18+
выводы:)....в контроллерах константы могут находиться не только в оперативке.... укажите пожалуйста команду для рассположения константы в ОЗУ...(не путать с флэшем!!!) заранее сэнкс (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2006, 14:10 |
|
||
|
#define vs. const
|
|||
|---|---|---|---|
|
#18+
здесь дефайны выигрывают Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2006, 20:07 |
|
||
|
#define vs. const
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2006, 10:46 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34020184&tid=2030297]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
203ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
| others: | 235ms |
| total: | 561ms |

| 0 / 0 |
