C宏传递号而不是变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C宏传递号而不是变量相关的知识,希望对你有一定的参考价值。

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

#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

以上是关于C宏传递号而不是变量的主要内容,如果未能解决你的问题,请参考以下文章

Flask模板宏的概念和基本使用

在C代码中将结构体变量作为参数传递效率忒低

inline内联函数

如何使用Android片段管理器传递变量[重复]

SAS代码错误地将宏变量的值作为输出中的新列/变量传递

[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础