Chinaunix首页 | 论坛 | 博客
  • 博客访问: 27642
  • 博文数量: 8
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 102
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-11 15:40
文章分类
文章存档

2014年(7)

2013年(1)

我的朋友

分类: C/C++

2014-02-08 11:25:10

在main()函数执行之前执行的代码:
    全局对象的构造函数

那么在main() 函数之后可以执行代码么:
_onexit()函数可以实现该功能:
点击(此处)折叠或打开
  1. /* ONEXIT.C */

  2. #include <stdlib.h>
  3. #include <stdio.h>

  4. /* Prototypes */
  5. int fn1(void), fn2(void), fn3(void), fn4 (void);

  6. void main( void )
  7. {
  8.    _onexit( fn1 );
  9.    _onexit( fn2 );
  10.    _onexit( fn3 );
  11.    _onexit( fn4 );
  12.    printf( "This is executed first.\n" );
  13. }

  14. int fn1()
  15. {
  16.    printf( "next.\n" );
  17.    return 0;
  18. }

  19. int fn2()
  20. {
  21.    printf( "executed " );
  22.    return 0;
  23. }

  24. int fn3()
  25. {
  26.    printf( "is " );
  27.    return 0;
  28. }

  29. int fn4()
  30. {
  31.    printf( "This " );
  32.    return 0;
  33. }
输出如下:
This is executed first.
This is executed next.

后来测试在VC下可以正常编译通过,但是在linux下一直如法编译成功。不知道是linux下没有该函数还是头文件包含错误,后来找到另一个函数在linux下可实现该功能:
点击(此处)折叠或打开
  1. #include <stdlib.h>
  2. #include <stdio.h>

  3. void my_exit(int status,void *arg)
  4. {
  5.     printf("before exit()!\n");

  6.     printf("exit (%d)\n", status);

  7.     printf("arg = %s\n",(char*)arg);
  8. }


  9. int main()
  10. {
  11.     char * str="test";

  12.     on_exit(my_exit,(void *)str);

  13.     printf("main exit\n");
  14.     exit(1234);
  15. }
输出如下:
main exit
before exit()!
exit (1234)
arg = test

阅读(1077) | 评论(0) | 转发(0) |
0

上一篇:C++ explicit构造函数用法

下一篇:没有了

给主人留下些什么吧!~~