将参数发送到#define

时间:2017-08-14 15:49:53

标签: c c-preprocessor directive preprocessor-directive

我想知道是否可以将参数发送到#define宏以选择不同的输出

例如:

#define Row(1) LPC_GPIO0
#define Row(2) LPC_GPIO3
#define Row(3) LPC_GPIO2

然后在我的代码中,我创建了一个发送参数

的循环
Row(x)

3 个答案:

答案 0 :(得分:5)

这种宏语法不存在。

此外,可能不存在,因为在编译器编译代码之前强扩展宏。如果x不是编译时常量,那么就永远无法确定宏调用的源代码中要替换的内容。

如果您需要索引某些值,只需使用数组,例如(假设这些常数是整数):

static int rows[] = { 0, LPC_GPIO0, LPC_GPIO3, LPC_GPIO2 };

书写

rows[x]

会产生你似乎从无效的宏语法中得到的效果。

答案 1 :(得分:1)

如果你想使用宏

#define GPIOx(x) GPIO##x

GPIOx(1)将扩展为GPIO1

答案 2 :(得分:0)

如果你想在运行时计算这些,你可以用你想要的方法

#define Row(x) (x == 1 ? LPC_GPIO0 : (x == 2 ? LPC_GPIO3 : (x == 3 ? LPC_GPIO2 : ERROR_VALUE)))

虽然随着选项数量的增加而变得混乱

此外,即使您确实希望在编译时对其进行评估,只要x是常量,大多数优化编译器都会为您执行此操作