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

C - run function before/after main() ended

本文关键字:之后 运行 函数 结束 main      更新时间:2023-10-16

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

如果您正在使用GCC,您可以创建构造函数/析构函数:

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

示例:

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

123

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

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

GCC也有构造函数和析构函数属性,可以做你想做的事情,但这不是普通的C或c++。

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

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

不清楚你想做什么,甚至不清楚这个问题是想问"我能做吗?"还是"这样做安全吗?"你能解释一下吗?