【发布时间】:2009-03-20 15:30:19
【问题描述】:
我正试图在函数返回给调用者之前在函数末尾执行一些操作。 为此,我想在特定上下文中覆盖 return。行为应该与 __cyg_profile_func_exit 相同,但我只想为某些功能激活它。
我不知道是否可以使用 gcc 内置函数或这种东西。
谢谢。
【问题讨论】:
我正试图在函数返回给调用者之前在函数末尾执行一些操作。 为此,我想在特定上下文中覆盖 return。行为应该与 __cyg_profile_func_exit 相同,但我只想为某些功能激活它。
我不知道是否可以使用 gcc 内置函数或这种东西。
谢谢。
【问题讨论】:
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...
【讨论】:
不,不是 C 本身。
你可以做的是写一个#define宏返回:
#define RETURN(func) if(_DEBUG_) func; return ;
#define RETURNV(func, val) if(_DEBUG_) func; return val ;
(警告,你可能比我想更多地考虑保护特殊情况。)
否则,您将需要编写一些东西来破坏幕后的代码,这就是分析器所做的。
【讨论】: