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

 
 
> Параметр макроса С, изменение макроса по передаваемому параметру
Dimentius
сообщение Aug 1 2007, 09:54
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 27-09-05
Пользователь №: 8 980



Как правильно написать макрос со структурой, зависящей от параметра?
Например, для циклов ожидания.

Вот такая конструкция НЕПРАВИЛЬНАЯ, но смысл должен быть понятен :

#define DELAY(N)\
#if (N == 1)\
NOP;\
#elif (N > 1)\
delay_cycles(N>>1);\
#endif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
amusin
сообщение Aug 1 2007, 10:15
Сообщение #2


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

Группа: Участник
Сообщений: 120
Регистрация: 2-09-05
Из: Екатеринбург
Пользователь №: 8 165



Цитата(Dimentius @ Aug 1 2007, 15:54) *
Как правильно написать макрос со структурой, зависящей от параметра?
Например, для циклов ожидания.

Вот такая конструкция НЕПРАВИЛЬНАЯ, но смысл должен быть понятен :

#define DELAY(N)\
#if (N == 1)\
NOP;\
#elif (N > 1)\
delay_cycles(N>>1);\
#endif


Если N - переменная, то нельзя. Если константа из фиксированного набора значений и известная в момент компиляции, то можно. Как? Идея по ссылке http://mb9x.ginps.com/fujitsu/src/pin_macros.html

А вообще сделайте inline функцию и не парьте себе мозг.
Go to the top of the page
 
+Quote Post
tag
сообщение Aug 1 2007, 10:54
Сообщение #3


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

Группа: Свой
Сообщений: 151
Регистрация: 21-02-06
Пользователь №: 14 561



Цитата(amusin @ Aug 1 2007, 14:15) *
Если N - переменная, то нельзя. Если константа из фиксированного набора значений и известная в момент компиляции, то можно. Как? Идея по ссылке http://mb9x.ginps.com/fujitsu/src/pin_macros.html

А вообще сделайте inline функцию и не парьте себе мозг.



... inline функции не входят в стандартный С, а только в С++, и потом чем плох макровызов?
Go to the top of the page
 
+Quote Post



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

 


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


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