我想用静态数字而不是变量作为参数来定义宏。这个宏编译。
#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)
。那可能吗?
正如评论中所传达的那样,您打算将宏用作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
取代。
如果使用不在列表中定义的值调用宏,则会出现宏替换错误。
只需定义如下:
#define FOO_1 global_variable=96
#define FOO_2 global_variable=117
...
#define FOO_3 global_variable=20
#define foo(x) foo_##x
#define foo_1 global_variable=96