C语言 如何计算 #define 中的逗号



我正在使用XC8编译器开发一个带有PIC的小型嵌入式应用程序。在XC8中设置引脚(输出或输入)的用法,程序员应该执行如下指令:

TRISAbits.RA0 = 1;

特别:

  • 寄存器前缀中的 TRIS(常量)
  • A 是端口
  • 位是后缀(常量)
  • RA0 是引脚的名称

我想做的是用人类可读的名称定义所有引脚,例如:

#define LED_1     A,RA0
#define LED_2     A,RA1
#define SWITCH_1  B,RB5
...

并定义一些宏,如SET_OUTPUTSET_INPUT以这种方式使用:SET_OUTPUT(LED_1)

我尝试做的是这两个宏:

#define SET_INPUT(port, pin)  TRIS ## port ## bits. ## pin ## = 0

但是,先前定义的常量内的逗号不会扩展并解释为单个参数。我也试过:

#define SET_INPUT(X)  SET_INPUT_(X ## "")
#define SET_INPUT_(port, pin)  TRIS ## port ## bits. ## pin ## = 0

没有成功。

本质上与这个问题相反:C/C++ 宏中的逗号

是否存在解决方案或更方便的方法?

你很接近:

#define SET_INPUT(X)  SET_INPUT_(X)
#define SET_INPUT_(port, pin)  TRIS ## port ## bits.pin = 1

##仅用于粘贴两个令牌以形成另一个令牌。 对于您没有形成新令牌的情况(例如 bits.pin)你不需要做任何特别的事情。

我建议对宏进行语句化:

#define SET_INPUT_(port, pin)  do { TRIS ## port ## bits.pin = 1; } while (0)

相关内容

  • 没有找到相关文章