0

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

基本结构是这样的:

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

我想要的是为了

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

被调用,但是字符串宏似乎并没有替换调用的前缀部分。

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

4

2 回答 2

2

宏只适用于完整的令牌(感谢上帝——它们已经够糟糕了)。换句话说,#define foo bar只影响identified foo,而不影响identifier foo_1,因为那不是同一个token。

如果不能修改调用代码,就没有办法实现你想要的。使用文本编辑器的搜索和替换或类似的东西。

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

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

在你包含这个片段之前,你定义了这样的东西:

#define foo(i) bar_ ## i
于 2013-06-25T14:18:26.850 回答
1

使用字符串连接

➤ 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);
于 2013-06-25T14:18:08.143 回答