条件宏定义

时间:2014-04-11 18:29:59

标签: c gcc macros c-preprocessor avr

我尝试了以下语法来定义宏:

#define SETBIT(ADDRESS,BIT,NEG)  #if NEG                    \
                                   (ADDRESS &= ~(1<<BIT))   \
                                 #else                      \
                                   (ADDRESS |= (1<<BIT))    \
                                 #endif

使用:

#define LED1 PORTA,1,1   \\ LED with anode to Vcc
#define LED2 PORTA,1,0   \\ LED with anode to GND
SETBIT(LED1)             \\ resulting in bit clear
SETBIT(LED2)             \\ resulting in bit set

我希望明确的要点是:我只想在一个地方指定端口极性,并使代码更具可读性和可扩展性。

然而,GCC编译器抱怨它:

  

ipt.h:1:错误:'#'后面没有宏参数(第30列)

我发现宏定义中不允许使用#if

如何使用指定的函数声明宏?

1 个答案:

答案 0 :(得分:1)

尝试这样的事情:

#define SETBIT(ADDRESS,BIT,NEG) \
  if (NEG)                      \
    (ADDRESS &= ~(1<<BIT));     \
  else                          \
    (ADDRESS |= (1<<BIT));