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

 
 
> Сложная автозамена через #define
kolobochishe
сообщение Dec 9 2015, 08:59
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



Пример:

сейчас

Код
// Запись значений по указателям
*pTIMER7_PERIOD = 0x0000FFFF;
*pTIMER7_WIDTH = 0x00007FFF;


Как сделать такую запись через всего 1 дефайн? Т.к. текст TIMER7 есть во всех
именах регистров, то, наверно, их можно заменить одним дефайном?

Код
#define BKLT_TIMER TIMER7

*pBKLT_TIMER_PERIOD = 0x0000FFFF;
*pBKLT_TIMER_WIDTH = 0x00007FFF;


и т.д. Что нужно дополнительно сделать, чтобы такая замена работала?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Apr 28 2016, 17:28
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



В продолжение темы.
В исходниках V-USB часто встречаются макросы (дефайны) с одинаковыми именами/идентификаторами на входе и на выходе макроса. Как компиляторы относятся к этому и что говорит стандарт?

Если компилятору "случайно" второй раз применить этот макрос к результату этого же макроса, то получится билиберда.

Сообщение отредактировал GetSmart - Apr 28 2016, 18:03


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
AleksBak
сообщение Apr 29 2016, 03:17
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Цитата(GetSmart @ Apr 28 2016, 21:28) *
В продолжение темы.
В исходниках V-USB часто встречаются макросы (дефайны) с одинаковыми именами/идентификаторами на входе и на выходе макроса. Как компиляторы относятся к этому и что говорит стандарт?

Если компилятору "случайно" второй раз применить этот макрос к результату этого же макроса, то получится билиберда.

Такие макросы сделаны для "удобства", но главное для улучшения читаемости кода. А применять в итоге их следует с осторожностью. Склейка и вложенные макросы могут по-разному работать у разных компиляторов т.к. не совсем стандартны.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 29 2016, 06:23
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (AleksBak @ Apr 29 2016, 06:17) *
т.к. не совсем стандартны.
Про это можно подробнее? В Стандарте есть раздел 6.10.3.1 Argument substitution.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
AleksBak
сообщение Apr 29 2016, 06:55
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Цитата(Сергей Борщ @ Apr 29 2016, 10:23) *
Про это можно подробнее? В стандарте есть раздел 6.10.3.1 Argument substitution.

В смысле не все компиляторы могут поддержать. Это имел ввиду.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 29 2016, 08:08
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (AleksBak @ Apr 29 2016, 09:55) *
В смысле не все компиляторы могут поддержать. Это имел ввиду.
Если компилятор не выполняет требования Стандарта, то это компилятор "языка, похожего на Си", но никак не компилятор Си. Использовать такой компилятор просто не нужно и уж тем более нет смысла писать код с оглядкой на такие компиляторы.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- kolobochishe   Сложная автозамена через #define   Dec 9 2015, 08:59
- - psL   http://stackoverflow.com/questions/1489932...macro...   Dec 9 2015, 09:10
- - SSerge   Цитата(kolobochishe @ Dec 9 2015, 15:59) ...   Dec 9 2015, 11:33
|- - jcxz   Цитата(kolobochishe @ Dec 9 2015, 14:59) ...   Dec 15 2015, 12:48
|- - kolobochishe   Цитата(SSerge @ Dec 9 2015, 17:33) ... Уд...   Dec 16 2015, 15:42
|- - barabek   Цитата(kolobochishe @ Dec 17 2015, 01:42)...   Dec 16 2015, 22:18
||- - kolobochishe   Цитата(barabek @ Dec 17 2015, 03:18) Ошиб...   Dec 17 2015, 10:12
||- - barabek   Цитата(kolobochishe @ Dec 17 2015, 20:12)...   Dec 17 2015, 10:22
||- - demiurg_spb   Цитата(kolobochishe @ Dec 17 2015, 13:12)...   Dec 17 2015, 10:37
||- - barabek   Цитата(kolobochishe @ Dec 17 2015, 20:12)...   Dec 18 2015, 05:32
|- - jcxz   Цитата(kolobochishe @ Dec 16 2015, 21:42)...   Dec 18 2015, 08:16
|- - kolobochishe   Цитата(jcxz @ Dec 18 2015, 13:16) А что и...   Dec 18 2015, 10:28
|- - jcxz   Цитата(kolobochishe @ Dec 18 2015, 16:28)...   Dec 21 2015, 08:11
|- - Dog Pawlowa   Цитата(kolobochishe @ Dec 18 2015, 13:28)...   Dec 23 2015, 00:30
- - Флюктуация ваккума   Нужно ипользовать вложенные макросы. Т.е. вызов ма...   Dec 16 2015, 18:35
- - Флюктуация ваккума   Народ! Да выясните наконец подерживает компиля...   Dec 18 2015, 14:01
|- - Herz   Цитата(Флюктуация ваккума @ Dec 18 2015, 16...   Dec 18 2015, 14:06
|- - GetSmart   ЦитатаThe argument list is enclosed in parentheses...   May 3 2016, 16:39
|- - SSerge   Цитата(GetSmart @ May 3 2016, 23:39) Вопр...   May 4 2016, 16:33
- - k155la3   Если возникает сомнение в том - как использовать ...   Apr 29 2016, 05:48
- - ViKo   Про особенности #define еще Керниган с Ричи в свое...   Apr 29 2016, 08:15


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

 


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


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