繁体   English   中英

如何将不同的 function 指针传入 c 中的 atexit?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM