gcc 当调用它的函数退出时执行某些代码的C函数

kjthegm6  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(125)

我想要一个函数,它可以实现类似于伪C代码中所列的行为。我想这可能是通过使用函数指针来实现的。
如果我所构想的模式很糟糕/不可能实现,我非常乐意接受替代方案作为答案,如果它能实现同样的功能。

void log_func(const char* name, /*other args*/) {
  printf("called function: %s\n", name);
  if (/*calling function exited*/)
    printf("exited function: %s\n", name);
}

void example_func() {
  log_func(__func__); // __func__ macro is expanded to be function name as a c-string
  printf("This function does nothing\n");
}

输出:

called function: example_func
This function does nothing
exited function: example_func
7kqas0il

7kqas0il1#

这样的东西对返回void的函数有效。对于任意返回必须更聪明。

#include<stdio.h>

#define WRAPPER
#ifdef WRAPPER
#define LOG_FUNC(fname, ...) \
    do { \
    printf("called function: %s\n", #fname); \
    fname(__VA_ARGS__); \
    printf("exited function: %s\n", #fname); \
    } while(0)
#else
#define LOG_FUNC(fname, ...) \
    fname(__VA_ARGS__)
#endif
     
void phello(int n, char *s) {
    for(int i=0; i<n; i++) {
        printf("%s\n", s);
    }
}

int main()
{  
    LOG_FUNC(phello, 3, "Hello, World!");
}

输出量

called function: phello
Hello, World!
Hello, World!
Hello, World!
exited function: phello

相关问题