gpt4 book ai didi

libc - 什么时候应该使用atexit()?

转载 作者:行者123 更新时间:2023-12-04 23:03:28 27 4
gpt4 key购买 nike

GNU page说:

Your program can arrange to run its own cleanup functions if normal termination happens. If you are writing a library for use in various application programs, then it is unreliable to insist that all applications call the library's cleanup functions explicitly before exiting. It is much more robust to make the cleanup invisible to the application, by setting up a cleanup function in the library itself using atexit or on_exit.

其中一个是 SDL pages说:

You can use SDL_Quit() with atexit() to ensure that it is run when your application is shutdown, but it is not wise to do this from a library or other dynamically loaded code.

我从 GNU 页面了解到,它鼓励在程序中使用 atexit()。

有人可以从 SDL 页面对此进行详细说明吗?意思不是很明显:

but it is not wise to do this from a library or other dynamically loaded code.

使用 atexit() 时要避免哪些陷阱?

以上两段引述自相矛盾吗?

最佳答案

不,SDL 说不要从库中调用 atexit(SDL_Quit)。 GNU 建议你在你的库中设置 atexit 以避免清理问题,SDL 说不要从不同的库调用它 - 由于动态代码的卸载方式你不能确定排序(尤其是在多线程应用程序中)。

简短版本:在程序的主程序中调用 atexit(SDL_Quit)。如果您正在围绕 SDL 使用或编写包装器库,不要在该库中调用 atexit(SDL_Quit),而是调用 atexit(YOURLIBRARY_Quit) 在主函数内部(假设 YOURLIBRARY_Quit 将处理对 SDL_Quit 的调用。

关于libc - 什么时候应该使用atexit()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19402417/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com