Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: #ifdef
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
MiklPolikov
# define A
# define B
Как после этого написать # ifdef что бы он выполнялся если определено или A или B или они оба ?

Заранее спасибо за подсказку !
skripach
Цитата(MiklPolikov @ Mar 24 2014, 07:06) *
# define A
# define B
Как после этого написать # ifdef что бы он выполнялся если определено или A или B или они оба ?

Заранее спасибо за подсказку !

Наверно
Код
if defined(A) || defined(B)

Harvester
Цитата(MiklPolikov @ Mar 24 2014, 08:06) *
# define A
# define B
Как после этого написать # ifdef что бы он выполнялся если определено или A или B или они оба ?

Заранее спасибо за подсказку !

Код
#if defined (A) || defined (B)
MiklPolikov
Спасибо.
Ещё вопрос :
можно ли внутри #define использовать #ifdef ? Имею в виду это :

Код
  #define MIC_POWER_ON  {\
                             #ifdef  MIC_PA10
                               GPIOA->BSRRL=GPIO_BSRR_BS_10;
                                       #endif
                             #ifdef  MIC_PA11
                               GPIOA->BSRRL=GPIO_BSRR_BS_11;
                                       #endif
}


PS
Я не то что бы извращенец. Просто один код компилируется для нескольких разных устройств.
Harvester
Цитата(MiklPolikov @ Mar 24 2014, 08:43) *
Спасибо.
Ещё вопрос :
...
PS
Я не то что бы извращенец. Просто один код компилируется для нескольких разных устройств.

На мой взгляд ничего не мешает так сделать. Но чаще встречается другая конструкция, что-то вроде
Код
#ifdef BSP_USE_MIC
#ifdef  MIC_PA10
     #define MIC_POWER_ON       GPIOA->BSRRL=GPIO_BSRR_BS_10
#endif
#ifdef  MIC_PA11
     #define MIC_POWER_ON       GPIOA->BSRRL=GPIO_BSRR_BS_11
#endif
#else
#define MIC_POWER_ON
#endif
MiklPolikov
Цитата(Harvester @ Mar 24 2014, 09:14) *
На мой взгляд ничего не мешает так сделать. Но чаще встречается другая конструкция, что-то вроде


Именно так, как написал я, не компилируется.

А так, как советуете Вы, не подходит, потому что разных условий на самом деле больше, чем я написал для примера, и самым компактным решением было бы,
если бы можно было применять много разных #ifdef внутри #define
mdmitry
Цитата(MiklPolikov @ Mar 24 2014, 09:19) *
Именно так, как написал я, не компилируется.

А обратные слэши внутри многострочных макро не нужны?
demiurg_spb
Цитата(Harvester @ Mar 24 2014, 08:17) *
Код
#if defined (A) || defined (B)
Есть ещё один хитрый способ, позволяющий убить двух зайцев:
1) Узнать, что А или B определено
2) Убедиться, что А или В отличны от нуля.

Код
#if A+0 || B+0
Работает это потому, что +0 (в случае когда вообще нет определения А или В) трактуется как знак числа ноль, а не как оператор +.

Цитата(MiklPolikov @ Mar 24 2014, 09:19) *
Эта задача решается совсем другим способом.
Погуглите на предмет: "макросы аскольда волкова".
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.