[英]How to pass in different function pointers into atexit in c?
我知道atexit()
接受这种类型的 function 指针void (*function)(void)
。 我想要做的是,只要 porgam 存在,它就会运行 function 以释放所有 memory。 所以我希望atexit()
接受这个 function 指针而不是void (*function)(struct Node)
。 有没有办法解决这个问题,或者类似的东西可以让我这样做。
您传递给atexit
的 function必须具有匹配的 function 签名。
如果此函数的工作是释放一些 memory,则指向该 memory 的指针必须作为文件范围变量可用。
您可以为清理功能添加自己的寄存器:
typedef void atexit_f(void*);
void my_atexit(atexit_f* callback, void *data);
该寄存器将保存在一个全局变量(即链表)中。 该寄存器将在使用atexit()
注册的清理 function 中清理。
struct cleanup_node {
atexit_f *cb;
void *data;
struct cleanup_node *next;
};
static struct cleanup_node *head;
void my_atexit_cleanup(void) {
for (struct cleanup_node *node = head; node; node = node->next) {
node->cb(node->data);
}
// free nodes itself
}
...
int main() {
atexit(my_atexit_cleanup);
...
my_atexit(some_function, some_data);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.