【发布时间】:2018-07-22 19:37:56
【问题描述】:
我正在尝试使用## 预处理器运算符来确定要使用的巫婆 GPIO。 这是我的代码:
#define GPIO_Pin_1 0x0001
#define GPIO_Pin_2 0x00CA
#define GPIO_Pin_3 0x00DE
#define GPIO_Pin_4 0x00AC
#define DIVIDE(a , b) ( (a) / (b) )
#define NUMBER_TO_GPIO(a) GPIO_Pin_##DIVIDE(a , 2)
int gpioNumber = 8;
int gpioAddress = NUMBER_TO_GPIO(gpioNumber);
gpioAddress 的期望值为 0x00AC (GPIO_Pin_4 ),但编译器给出了这个错误:“GPIO_Pin_DIVIDE declared implicitly”。我想连接 GPIO_Pin_ 和 DIVIDE(a,b) 宏的结果
【问题讨论】:
-
"我想连接 GPIO_Pin_ 和 DIVIDE(a,b) 宏的结果" 您对
DIVIDE宏的结果有何期望?你期望一个数值吗?` -
C 预处理器进行文本替换。不是数学评估。结果将是
((gpioNumber) / (2)),它并不适合任何串联尝试。 -
为什么不用函数?
-
能否请您确定您使用的是哪种语言?您同时添加了 C 和 C++,但一次只能使用一个。
-
每当您为如此简单的事情(例如设置 gpio 引脚)想出复杂的宏时,您就知道您的程序设计出了问题。这很可能是一个 XY 问题,您不应该首先使用宏来解决它。例如,这闻起来像一个普通的查找表会很方便。
标签: c++ c macros preprocessor