gpt4 book ai didi

c - 用宏包围一个函数

转载 作者:太空狗 更新时间:2023-10-29 15:35:50 26 4
gpt4 key购买 nike

我有一个 .c 文件,其中包含一些函数,例如

void foo(void)
{
...doSomeStuff...
}

现在,我想用一些代码围绕这个函数,导致

void foo(void)
{
...additional stuff...
{
...doSomeStuff...
}
...do more additional stuff...
}

简而言之,想把整个函数体放在一个“外部”函数中。

我试图让它与可以像这样使用的宏一起工作:

MAGIC_MACRO(foo)
{
...doSomeStuff...
}

这样,宏用户(或我)只需获取 foo 函数的头部并将 void 返回类型替换为 MAGIC_MACRO 内容。 MAGIC_MACRO 应扩展到“额外的和更多额外的东西”部分。

好的,我认为这很容易。我试图像这些包含 do-while(0) 循环的宏一样实现它。好吧,最大的问题是“更多额外的东西”部分,它必须在旧函数的主体之后。

有什么想法吗?问候,行李

最佳答案

我不建议这样做,但您可以让宏创建一个包含进入/退出代码的函数,以及另一个包含用户给出的代码的函数:

#include <stdio.h>

#define MAGIC_MACRO(f) \
void f##_inner(void); \
void f(void) { \
printf("entry\n"); \
f##_inner(); \
printf("exit\n"); \
} \
void f##_inner()

MAGIC_MACRO(foo)
{
printf("foo\n");
}

int main(void) {
foo();
return 0;
}

调用MAGIC_MACRO 将创建foofoo_inner 函数,其中foo 调用foo_innerfoo_inner 包含用户代码,允许将其全部放在宏调用之后。

Live example

关于c - 用宏包围一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21171060/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com