C - 在main()结束之前/之后的运行功能

时间:2013-05-10 13:18:28

标签: c++ c

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

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:7)

如果您使用的是GCC,则可以创建construtors/destructor个功能:

  

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

样品:

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

输出:

123

答案 2 :(得分:0)

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

GCC还有构造函数和析构函数function attributes,它们可以执行您想要的操作,但这不是vanilla C或C ++。

答案 3 :(得分:0)

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

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

目前尚不清楚你要做什么,甚至不知道这个问题是“我能做到”还是“这样做是否安全”?你能说清楚吗?