C宏通过号而不是变量

时间:2018-06-22 03:43:45

标签: c function variables macros arguments

我想用静态数字而不是变量作为参数来定义宏。 该宏会编译。

#define foo(a) global_variable=a

但这无法编译。

#define foo(1) global_variable=96
#define foo(2) global_variable=117
...
#define foo(53) global_variable=20

我正在预先计算与传递的数字相对应的值。例如,如果代码中的每个位置都使用 global_variable=96 ,我希望编译器替换 foo(1) 。有可能吗?

3 个答案:

答案 0 :(得分:2)

如评论中所述,您打算将宏用作foo(1),而不使用某些变量foo(x)。可以做到的。

这是Joy Allen's answer的补充。

首先,您将每个值的宏定义为-

#define foo_1 global_variable=96
#define foo_2 global_variable=117
...
#define foo_53 global_variable=20

现在,您需要一个实际使用的宏。

#define foo(a) foo_##a

现在您可以使用foo(53),它将用global_variable=20代替。

如果使用不在定义的列表中的值调用宏,则会收到宏替换错误。

答案 1 :(得分:0)

只需定义如下:

#define FOO_1 global_variable=96
#define FOO_2 global_variable=117
...
#define FOO_3 global_variable=20

答案 2 :(得分:0)

#define foo(x) foo_##x
#define foo_1 global_variable=96