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

 
 
> Условное выражение внутри #define
ViKo
сообщение Mar 21 2012, 11:15
Сообщение #1


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Есть ли возможность в C сделать что-то подобное:
Код
#define TEST(A,B,MULT)    \
    A = B<<(#if (#MULT == "ONE") 1    \
            #elif (#MULT == "TWO") 2);
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sasamy
сообщение Mar 21 2012, 12:47
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(ViKo @ Mar 21 2012, 15:15) *
Есть ли возможность в C сделать что-то подобное:
Код
#define TEST(A,B,MULT)    \
    A = B<<(#if (#MULT == "ONE") 1    \
            #elif (#MULT == "TWO") 2);


Код
#define ONE 1
#define TWO 2            

#define TEST(A,B,MULT)    \
    A = B<<MULT;
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 21 2012, 13:36
Сообщение #3


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(sasamy @ Mar 21 2012, 15:47) *
Код
#define ONE 1
#define TWO 2            

#define TEST(A,B,MULT)    \
    A = B<<MULT;

Мне нужно было и имя ONE/TWO оставить и использовать (нельзя переопределять), и количество сдвигов по имени задать.

Конкретно, вот что вышло:
Код
#define GPIO_INIT(PORT,REG,\
    BT15,BT14,BT13,BT12,BT11,BT10,BT9,BT8,BT7,BT6,BT5,BT4,BT3,BT2,BT1,BT0) \
    GPIO_##REG##_INIT(PORT,BT15,BT14,BT13,BT12,BT11,BT10,BT9,BT8,BT7,BT6,BT5,BT4,BT3,BT2,BT1,BT0)

#define GPIO_MODER_INIT(PORT,\
    MD15,MD14,MD13,MD12,MD11,MD10,MD9,MD8,MD7,MD6,MD5,MD4,MD3,MD2,MD1,MD0) \
    GPIO##PORT->MODER = \
    (MD15<<30|MD14<<28|MD13<<26|MD12<<24|MD11<<22|MD10<<20|MD9<<18|MD8<<16| \
    MD7<<14|MD6<<12|MD5<<10|MD4<<8|MD3<<6|MD2<<4|MD1<<2|MD0)

#define GPIO_OTYPER_INIT(PORT,\
    OT15,OT14,OT13,OT12,OT11,OT10,OT9,OT8,OT7,OT6,OT5,OT4,OT3,OT2,OT1,OT0) \
    GPIO##PORT->OTYPER = \
    (OT15<<15|OT14<<14|OT13<<13|OT12<<12|OT11<<11|OT10<<10|OT9<<9|OT8<<8| \
    OT7<<7|OT6<<6|OT5<<5|OT4<<4|OT3<<3|OT2<<2|OT1<<1|OT0)
...
Go to the top of the page
 
+Quote Post



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

 


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


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