我遇到了一个问题,我需要能够通过宏修改 C 函数调用。
基本结构是这样的:
#define foo bar
foo_1(x);
foo_2(x);
foo_3(x);
我想要的是为了
bar_1(x);
bar_2(x);
bar_3(x);
被调用,但是字符串宏似乎并没有替换调用的前缀部分。
有人可以指出我正确的方向吗?
宏只适用于完整的令牌(感谢上帝——它们已经够糟糕了)。换句话说,#define foo bar
只影响identified foo
,而不影响identifier foo_1
,因为那不是同一个token。
如果不能修改调用代码,就没有办法实现你想要的。使用文本编辑器的搜索和替换或类似的东西。
如果你真正想要的是一段函数调用代码,你可以根据需要调整为不同的名称前缀,你可以这样写:
foo(1)(x);
foo(2)(x);
foo(3)(x);
在你包含这个片段之前,你定义了这样的东西:
#define foo(i) bar_ ## i
使用字符串连接:
➤ 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);