`
beckshanling
  • 浏览: 256658 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

main主函数执行完毕后,是否可能会再执行一段代码?

    博客分类:
  • C++
阅读更多

main主函数执行完毕后,是否可能再执行一段代码??5 C  x$ v- G9 A# K5 S2 y* I" M
书上说使用atexit函数注册一个函数.有一段代码:
, R* v. @4 {% L$ ^ #include <iostream.h>1 |) s$ f/ _8 D! d( h/ K1 _
#include <stdlib.h>
. A$ E. ?% g5 B #include<stdio.h>5 T+ M4 e! h# j/ l
int atexit(void (*function)(void));3 x; F2 Y. O$ \$ P% b
#include <string.h>
- A- E6 e% q# @5 p* {1 T3 ~1 h #include<stdlib.h>
6 t4 G# w8 t0 }5 h$ d #include <stdio.h>3 }2 W/ ^% j  w, a* Y" y6 e
void fn1(void),fn2(void),fn3(void),fn4(void);  O+ {, `$ [8 ~* z$ _! x, k7 k
int main(void)
. f2 B: m% L6 {$ t* _; ?4 a- v9 n {9 Q& V, y( \% g, \% T" T( N9 _
atexit(fn1);3 q7 Y9 h! J2 g) v* K% j* B
       atexit(fn2);
( [3 E+ `5 e. H; {* X atexit(fn3);
! Q$ E) p# _/ W- K3 h3 | atexit(fn4);
' k! f5 b" |- g. l' \ printf("This is executed first.\n");
. z' m# L  u! V2 z. `3 X( n  m //return 0;) u; v% _9 r4 d* ^+ p
}
5 D! t3 n: L/ Q; ]* Z; P8 {) @ void fn1()( g+ s* X$ a4 _% S' r2 D- @) i% E2 X
{
  z) b2 J/ L5 N( t/ L- u) L; u printf("next.\n");
2 e7 Z& Q3 a( D$ R }  b4 ?# C8 C3 _
void fn2()1 ?" G- ?4 V2 G. {, \; ^( H7 t$ `( Z
{5 w' H2 e# t& l7 j! m( _
printf("executed ");
4 ]! f* q1 X  U3 h4 ^ }
' ?! S7 _7 O, ?, D9 g void fn3()
: Y4 J# ?: o' Q; } {% g: Q& k! i4 S* j& K0 F. z/ g. h
printf("is ");: ?1 I- t7 Q- E
}
5 Q" {/ N! E5 z# c. ^- G void fn4(); E+ v* m4 O2 t, h* O" G: f
{  M& K  l7 t. H
printf("This ");
/ H( l4 H& K) z4 E }. w! X! {( i$ b, e. H
结果:8 v0 J( \. A8 `) ~4 w( w
This is executed first.
# y" c$ x1 {1 u+ E; U This is executed next.
3 W7 m4 w3 h% o6 @2 f# | 我不大明白为什么输出:This is executed next,而不是next executed is this.
7 o$ z  z7 R: [$ G 也不大明白注册的函数怎么调用的?  l9 ~( }3 x$ X  A2 k

 

main函数退出后,会在调用exit函数,而exit函数里对依次调用atexit注册的函数,不过调用顺序是和atexit注册顺序相反的。

分享到:
评论

相关推荐

    深入探讨:main函数执行完毕后,是否可能会再执行一段代码?

    本篇文章是对main函数执行完毕后,是否可能会再执行一段代码,进行了详细的分析介绍,需要的朋友参考下

    C++ 面试试题总结

    华为 腾讯 main 函数执行以前,还会执行什么代码? main 主函数执行完毕后,是否可能会再执行一段代码,给出说明?

    程序员面试经典题

    3 main主函数执行完毕后 是否可能会再执行一段代码 (朗讯的一道笔试题) 答案:可以 可以用 onexit 注册一个函数 它会在main 之后执行; 如果你需要加入一段在main退出后执行的代码 可以使用atexit 函数 注册一个...

    C++面试时出现频率最高的40题.docx

    C++面试时出现频率最高的40题,经典解析,有些可能打破你之前的理解。比如main 主函数执行完毕后,是否可能会再执行一段代码,给出说明?

    c++笔试题(无答案)

    3.main主函数执行完毕后,是否可能会再执行一段代码? 4.一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态? 在子类的空间里,有没有父类的这个函数,或者父类的私有变量? 5.给一个字符...

    C语言程序设计标准教程

    因此,C程序的执行总是从main函数开始, 完成对其它函数的调用后再返回到main函数,最后由main函数结束整个程序。一个C源程序必须有,也只能有一个主函数main。   函数定义的一般形式 1.无参函数的一般形式 ...

    C/C++面试题目及解答.doc

    &lt;br&gt;3.main主函数执行完毕后,是否可能会再执行一段代码?(朗讯的一道笔试题) 答案:可以,可以用_onexit 注册一个函数,它会在main 之后执行; 如果你需要加入一段在main退出后执行的代码,可以使用...

    单片机C语言入门-以最为流行的80C51 单片机为例来学习单片机的C 语言编程技术

    是直接对P1_0 取反,因此取反完毕后还要使用赋值符号(“=”)将取反后的值再赋给P1_0, 这样,如果原来P1.0 是低电平(LED 亮),那么取反后,P1.0 就是高电平(LED 灭),反之, 如果P1.0 是高电平,取反后,P1.0...

    RINGSDK包含界面库和图象库。

    REGCMD的函数会执行,之后的REGCMD的函数则会被屏蔽,不会执行到,不管WM_COMMAND消息里是否处理了这些命令。 5、主函数及创建主窗口: 界面库封装了WinMain,因此主入口函数改成了RingMain,函数原型为: int ...

Global site tag (gtag.js) - Google Analytics