[程序员开发手册之程序中第一个执行的函数是什么意思]程序员开发手册之程序中第一个执行的函数是什么?

这篇文章中介绍了C语言中不常用的几个特征,例如函数前后我们想执行的函数设置各种花式退出程序方式等。

通常我们写C程序的时候从函数开始写,所以我们中没有人会关心这个问题。事实上,main函数不是程序的第一个执行函数,也不是程序的最后一个执行函数。在节目中。

编译并执行上面的代码,输出如下图所示。

因此,您可以看到main函数不是第一个执行的函数。那么程序中第一个执行的函数是什么?很简单。查看程序的调用堆栈就可以了。

如以上结果所示,程序的第一个执行函数是在类Unix操作系统上运行的第一个函数。

那么主函数是程序运行的最后一个函数吗?让我们看看下面的代码。

上述过程的输出如下:

由此可见,main函数也不是我们最后执行的函数!实际上,除了上述方法外,您还可以在libc中注册函数,以便在main函数之后程序结束运行之前运行。

您可以在函数注册中使用上述两个函数,在程序结束之前执行指定的函数。

我们可以详细分析上述程序的执行顺序。首先运行构造函数,运行atexit注册函数,运行on_exit注册函数,最后运行析构函数。从以上程序的输出中,我们可以看到我们注册的函数是有效的,但首先要注意注册的函数先运行的问题,不管注册的函数是使用atexit还是on_exit函数。(约翰肯尼迪,函数,函数,函数,函数,函数,函数,函数)现在我们来看下面的代码。

上述代码输出如下:

从输出结果来看,和上面提到的规则一样,首先注册注册的函数,然后执行。这一点在Linux程序员开发手册中也有提及。

但是,这里需要注意的是,由于atexit函数是标准函数,on_exit不是标准函数,因此应尽可能使用atexit函数,而不是on_exit函数。

其中,exit函数是libc提供的函数,使用该函数可以正常结束程序执行,以前注册的函数仍然可以执行。例如,在下面的代码中:

上述函数的执行结果如下:

[程序员开发手册之程序中第一个执行的函数是什么意思]程序员开发手册之程序中第一个执行的函数是什么? 热门话题

可以看到我们的代码正常运行。

但是,_exit是系统调用。运行此方法将直接退出程序。让我们看看下面的代码。

上述代码输出如下:

可以看到,我们注册的函数和最终分析函数都没有运行,程序直接结束了。

除上述函数外,还可以通过其他方法直接退出程序。

您还可以使用内嵌程序集结束函数,通过直接调用上面的函数来结束函数。例如,在64位操作系统上,可以使用以下代码退出程序:

上面是64位操作系统关闭程序的程序集实现,64是在系统上关闭程序的系统调用号60。下面使用32位操作系统的程序集实现结束程序,在32位系统上结束程序的系统调用号为1。

这篇文章中主要介绍了C语言中与退出程序相关的几项骚操作,希望大家都有收获!(莎士比亚,C,语言,语言,语言,语言,语言)


发表评论

Copyright 2002-2022 by 天天顺物流供应链官网(琼ICP备2022001899号-3).All Rights Reserved.