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宏传递号而不是变量的主要内容,如果未能解决你的问题,请参考以下文章