如何将不同的函数指针传递给 c 中的 atexit?
How to pass in different function pointers into atexit in c?
我理解 atexit()
接受这种类型的函数指针 void (*function)(void)
。我想要做的是,只要 porgam 存在,它就会运行一个函数来释放所有内存。所以我希望 atexit()
接受这个函数指针
void (*function)(struct Node)
。有没有办法解决这个问题,或者类似的东西可以让我做到这一点。
您传递给 atexit
的函数 必须 具有匹配的函数签名。
如果此函数的工作是释放一些内存,则指向该内存的指针必须作为文件范围变量可用。
您可以为清理函数添加自己的寄存器:
typedef void atexit_f(void*);
void my_atexit(atexit_f* callback, void *data);
寄存器将保存在全局变量(即链表)中。
寄存器将在使用 atexit()
.
注册的清理函数中清理
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);
}
我理解 atexit()
接受这种类型的函数指针 void (*function)(void)
。我想要做的是,只要 porgam 存在,它就会运行一个函数来释放所有内存。所以我希望 atexit()
接受这个函数指针
void (*function)(struct Node)
。有没有办法解决这个问题,或者类似的东西可以让我做到这一点。
您传递给 atexit
的函数 必须 具有匹配的函数签名。
如果此函数的工作是释放一些内存,则指向该内存的指针必须作为文件范围变量可用。
您可以为清理函数添加自己的寄存器:
typedef void atexit_f(void*);
void my_atexit(atexit_f* callback, void *data);
寄存器将保存在全局变量(即链表)中。
寄存器将在使用 atexit()
.
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);
}