首页 > 解决方案 > 是否有任何包装函数的 C 宏?

问题描述

有没有办法像我愿意用这种语法做的事情:

#define WRAP_MY_FUNCTION(x){Y} void x(int integer){printf("begin\n"); Y ; printf("end\n");}

所以我可以拥有这个

WRAP_MY_FUNCTION(Foo){printf("hello world\n");}

这相当于

void Foo(int integer)
{
    printf("begin\n");
    printf("hello world\n");
    printf("end\n");
}

输出

begin
hello world
end

注意:我更喜欢在括号中包含函数代码,以便最终用户理解这是一个代码块。

标签: cmacrosc-preprocessor

解决方案


您可以将另一个参数传递给宏来定义您的打印语句。

像这样的东西:

#define WRAP_MY_FUNCTION(x, Y) void x(int integer){printf("begin\n"); Y; printf("end\n");}

WRAP_MY_FUNCTION(Foo, printf("hello world\n"))

如果您想让最终用户更清楚这是一个代码块,并且正如 rici 指出的那样,添加一个 Variadic 宏来修复可能在您的源代码中的未受保护的逗号,您可以将您的定义重写为:

#define WRAP_MY_FUNCTION(x, ...)\
    void x(int integer)         \
    {                           \
        printf("begin\n");      \
        __VA_ARGS__             \
        printf("end\n");        \
    }                           \

推荐阅读