繁体   English   中英

带宏的函数调用前缀

[英]Prefixing function calls with macros

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

基本结构如下:

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

我想要的是

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

被调用,但是字符串宏似乎并不能代替调用的前缀部分。

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

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

如果您不能修改调用代码,则无法实现所需的代码。 使用文本编辑器的搜索和替换等方法。

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

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM