2013-05-10 88 views
1

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

+0

你在写什么平台? – Joe 2013-05-10 13:19:09

+1

你能不能把代码放在'main'的末尾?我们需要更多信息来提供真正有用的解决方案。另外,你是否需要C++或C,因为在C++中你可以使用构造函数和析构函数。 – 2013-05-10 13:20:34

+3

只需将'main()'重命名为eg oldmain()'和新的'main()'''oldmain()'等函数即可。 – pmg 2013-05-10 13:21:21

回答

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 
+1

+1。这里是一个例子:http://www.geeksforgeeks.org/functions-that-are-executed-before-and-after-main-in-c/ – 2013-05-10 13:26:21

7

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

0

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

海湾合作委员会也有构造函数和析构函数function attributes做你想做的,但这不是香草C或C++。

0

有许多解决问题的对策,其中一些已经提供:

  • 静态CRT intitialization /终止(静态对象析构函数 “钩子”)
  • 重命名你的主,并与实际主
  • 包裹它注册使用atexit()

目前尚不清楚你想要做什么挂钩,甚至是否有问题,打算:“我可以做它“还是”安全地做到这一点“?你能澄清吗?

相关问题