代码之家  ›  专栏  ›  技术社区  ›  LB40

如何在返回C之前调用函数?

gcc c
  •  1
  • LB40  · 技术社区  · 16 年前

    调用程序在m函数结束前返回某个函数。 为此,我想在特定上下文中重写return。该行为应该与优cyg_profile_func_exit相同,但我只想为某些函数激活它。

    我不知道是否可以使用gcc内置函数或类似的东西。

    2 回复  |  直到 16 年前
        1
  •  9
  •   Johannes Schaub - litb    16 年前

    GCC有一个属性,当自动变量超出范围时,它调用函数,并将该变量的地址传递给它

    void cleanup_fn(int *p) {
        puts("cleanup called...");
    }
    
    void f(void) {
        int p __attribute__((cleanup(cleanup_fn)));
        puts("in f...");
    }
    
    int main(void) {
        puts("calling f...");
        f();
        puts("out of it...");
        return 0;
    }
    

    calling f...
    in f...
    cleanup called...
    out of it...
    
        2
  •  0
  •   Charlie Martin    16 年前

    不,不是C语言本身。

    什么你 #define

    #define RETURN(func) if(_DEBUG_) func; return ;
    #define RETURNV(func, val) if(_DEBUG_) func; return val ;
    

    (警告,你可能需要比我更多地考虑保护特殊情况。)

    否则,您将需要编写一些在幕后破坏代码的代码,这正是探查器所做的。