我想用静态数字而不是变量作为参数来定义宏。 该宏会编译。
#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)
。有可能吗?
答案 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