我遇到了一个问题,我需要能够通过宏修改C函数调用。
基本结构是这样的:
#define foo bar
foo_1(x);
foo_2(x);
foo_3(x);
我想要的是
bar_1(x);
bar_2(x);
bar_3(x);
要调用,但字符串宏似乎不会替换调用的前缀部分。
有人能指出我正确的方向吗?
答案 0 :(得分:2)
宏只适用于完整的令牌(感谢上帝 - 他们已经足够糟糕了)。换句话说,#define foo bar
仅影响已标识的foo
,而不影响标识符foo_1
,因为它不是同一个标记。
如果您无法修改调用代码,则无法实现您想要的功能。使用文本编辑器的搜索和替换或类似的东西。
如果您真正想要的是一段函数调用代码,您可以根据需要调整为不同的名称前缀,您可以这样写:
foo(1)(x);
foo(2)(x);
foo(3)(x);
在您添加此代码段之前,您可以定义如下内容:
#define foo(i) bar_ ## i
答案 1 :(得分: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);