C - 在 main() 结束之前/之后运行函数 [重复]

Posted

技术标签:

【中文标题】C - 在 main() 结束之前/之后运行函数 [重复]【英文标题】:C - run function before/after main() ended [duplicate] 【发布时间】:2013-05-05 04:41:46 【问题描述】:

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

【问题讨论】:

你在写什么平台? 你不能把代码放在main的末尾吗?我们需要更多信息来提供真正有用的解决方案。另外,您需要 C++ 还是 C,因为在 C++ 中您可以使用构造函数和析构函数。 只需将main() 重命名为例如oldmain() 并在新的main() 中调用oldmain() 和其他需要的功能。 en.cppreference.com/w/cpp/utility/program 【参考方案1】:

如果你使用 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。这是一个例子:geeksforgeeks.org/…【参考方案2】:

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

【讨论】:

【参考方案3】:

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

GCC 也有构造函数和析构函数 function attributes 可以做你想做的事,不过这不是普通的 C 或 C++。

【讨论】:

【参考方案4】:

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

静态 CRT 初始化/终止(静态对象析构函数 "钩") 重命名 main 并用真正的 main 包装它 用 atexit() 注册一个钩子

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

【讨论】:

以上是关于C - 在 main() 结束之前/之后运行函数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

c语言中在main函数之前会执行啥?

c语言main啥意思?

main函数执行以前还会执行啥代码

函数main啥意思?

c语言中在main函数之前会执行啥?

在c语言中自定义了一个函数,在main中调用时提示找不到标识符,怎么办?