|
Сложная автозамена через #define |
|
|
|
Dec 9 2015, 08:59
|

Местный
  
Группа: Участник
Сообщений: 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; и т.д. Что нужно дополнительно сделать, чтобы такая замена работала?
|
|
|
|
|
 |
Ответов
|
Apr 29 2016, 03:17
|
Частый гость
 
Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364

|
Цитата(GetSmart @ Apr 28 2016, 21:28)  В продолжение темы. В исходниках V-USB часто встречаются макросы (дефайны) с одинаковыми именами/идентификаторами на входе и на выходе макроса. Как компиляторы относятся к этому и что говорит стандарт?
Если компилятору "случайно" второй раз применить этот макрос к результату этого же макроса, то получится билиберда. Такие макросы сделаны для "удобства", но главное для улучшения читаемости кода. А применять в итоге их следует с осторожностью. Склейка и вложенные макросы могут по-разному работать у разных компиляторов т.к. не совсем стандартны.
|
|
|
|
|
Apr 29 2016, 06:55
|
Частый гость
 
Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364

|
Цитата(Сергей Борщ @ Apr 29 2016, 10:23)  Про это можно подробнее? В стандарте есть раздел 6.10.3.1 Argument substitution. В смысле не все компиляторы могут поддержать. Это имел ввиду.
|
|
|
|
|
May 3 2016, 16:39
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата The argument list is enclosed in parentheses and must immediately follow the macro name. Вопрос о допустимости применения macro name в теле того же макроса. Argument substitution, если дословно, то из другой оперы. Очень может быть, что macro name в своём же теле таит какую-то граблю. К тому же, макросы можно переобъявлять. Но пока ещё глубоко не копался. Язык похожий на Си - забавно. Как права, похожие на права человека. По-американски.
Сообщение отредактировал GetSmart - May 3 2016, 18:01
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
Сообщений в этой теме
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    Сергей Борщ QUOTE (AleksBak @ Apr 29 2016, 09:55) В с... Apr 29 2016, 08:08     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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|