使用宏对函数进行前缀调用

时间:2013-06-25 14:14:06

标签: c macros

我遇到了一个问题,我需要能够通过宏修改C函数调用。

基本结构是这样的:

#define foo bar
foo_1(x);
foo_2(x);
foo_3(x);

我想要的是

bar_1(x);
bar_2(x);
bar_3(x);

要调用,但字符串宏似乎不会替换调用的前缀部分。

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

宏只适用于完整的令牌(感谢上帝 - 他们已经足够糟糕了)。换句话说,#define foo bar仅影响已标识的foo,而不影响标识符foo_1,因为它不是同一个标记。

如果您无法修改调用代码,则无法实现您想要的功能。使用文本编辑器的搜索和替换或类似的东西。

如果您真正想要的是一段函数调用代码,您可以根据需要调整为不同的名称前缀,您可以这样写:

foo(1)(x);
foo(2)(x);
foo(3)(x);

在您添加此代码段之前,您可以定义如下内容:

#define foo(i) bar_ ## i

答案 1 :(得分:1)

使用string concatenation

➤ cat try.h
#define mymacro(msv) bar_##msv
mymacro(1)(x);
➤ gcc -E try.h
# 1 "try.h"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "try.h"

bar_1(x);