3

我有一个问题问你。我需要确定我是否可以在 main() 函数结束之前或之后使用某些函数。我找不到 C 语言的一些例子。你能给我一些建议或例子吗?非常感谢。

4

4 回答 4

8

C 中有一个atexit函数(std::atexit在 C++ 中),它注册了一个要在程序终止时调用的函数。

于 2013-05-10T13:19:24.997 回答
8

如果您使用的是 GCC,则可以创建构造函数/析构函数:

constructor属性使函数在执行进入之前被自动调用main()。同样,该destructor属性会导致函数在main()完成或被调用后自动exit()调用。具有这些属性的函数对于初始化在程序执行期间隐式使用的数据很有用。

样本:

void __attribute__ ((constructor)) ctor() { printf("1"); }
void __attribute__ ((destructor))  dtor() { printf("3"); }
int main() { printf("2"); }

输出:

123
于 2013-05-10T13:24:18.130 回答
0

您可以将atexit()用于正常程序退出,使用信号处理程序(在 UNIX 中)用于异常退出。

GCC 还具有构造函数和析构函数属性,可以执行您想要的操作,但这不是普通的 C 或 C++。

于 2013-05-10T13:20:15.953 回答
0

这个问题有很多解决方案,其中一些已经提供:

  • 静态 CRT 初始化/终止(静态对象析构函数“钩子”)
  • 重命名你的主要并用真正的主要包装它
  • 使用 atexit() 注册一个钩子

目前尚不清楚您要做什么,甚至这个问题是否旨在“我可以这样做”还是“这样做是否安全”?你能澄清一下吗?

于 2013-05-10T13:25:25.720 回答