【发布时间】:2015-06-13 21:39:02
【问题描述】:
我有许多由两个逗号分隔的表达式组成的定义,如下所示:
#define PIN_ALARM GPIOC,14
我想将这些定义的第二个表达式(在上例中为 14 个)传递给一元宏,如下所示:
#define _PIN_MODE_OUTPUT(n) (1U << ((n) * 2U))
如何提取第二个数字?我想要一个宏,叫它“PICK_RIGHT”,它会为我做这个:
#define PICK_RIGHT(???) ???
这样我就可以创建一个新的宏来接受我的“PIN”定义:
#define PIN_MODE_OUTPUT(???) _PIN_MODE_OUTPUT(PICK_RIGHT(???))
我可以这样做:
#define RESULT PIN_MODE_OUTPUT(PIN_ALARM)
【问题讨论】:
-
只需使用宏来做简单的事情。这就是他们的功能
-
我会考虑在您的情况下不使用宏,而是使用一些脚本(例如在 POSIX 上的
awk中)生成 C 代码(在某些标头或某些包含的代码文件中)。或者使用外部预处理器,如GPP -
通过分别定义端口和位。无论如何,什么是“一元宏”?
-
请注意,以下划线和大写字母开头的名称保留给实现使用;你不应该自己创建这样的名字。
标签: c macros arguments c-preprocessor