C宏传递号而不是变量

问题描述 投票:2回答:3

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

#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)。那可能吗?

c function variables macros arguments
3个回答
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取代。

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


0
投票

只需定义如下:

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

0
投票
#define foo(x) foo_##x
#define foo_1 global_variable=96
© www.soinside.com 2019 - 2024. All rights reserved.