将函数名称中的前缀与宏连接起来?

时间:2019-09-26 11:23:03

标签: c macros

我想在函数名称的开头连接一些宏:

#include <stdio.h>

#define PFX mypfx

int PFX##_call() {
    printf("teeeeeeeeest");
}

int main(void)
{
    mypfxcall();
}

上面的代码在编译时返回错误。

如何在函数名称中添加带有宏的前缀?

3 个答案:

答案 0 :(得分:2)

为什么不使用namespace来代替

namespace mypfx
{
    int call() {
         printf("teeeeeeeeest");
    }
}

int main(void)
{
    mypfx::call();
}

答案 1 :(得分:1)

##运算符仅允许您在另一个宏定义内串联两个字符串。

但这是

int PFX##_call()

不是宏定义,因此它将扩展为无效的C:

int mypfx##_call()

有效用法示例:

#define FOO 1
#define BAR 2
#define FB FOO##BAR    // FB will expand to FOOBAR
                       // independently of the macros FOO and BAR

#define BF FOO BAR     // BF will expand to 1 2

答案 2 :(得分:1)

我不知道您为什么要这么做(也许是因为您想“模拟”名称空间),但是假设您使用的是C语言,则可以使用以下代码来实现。

#define concat2(X, Y) X ## Y
#define concat(X, Y) concat2(X, Y)
#define pfx(x) concat(pfx_, x)

用法:

int pfx(sum)(int x, int y) {
    return x + y;
}

int main() {
    printf("%d\n", pfx(sum)(5,4));
}

注意:如果您想使用更多的宏处理能力(我不知道是不是这种情况),则应该访问P99