`
tcspecial
  • 浏览: 896540 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

怎么在main函数开始前执行函数

阅读更多

    前天面试,突然遇到上面的这个题目,我当时想直接做个全局类就能解决

        

void before_main()
{
	printf("%s\n",__FUNCTION__);
}

void after_main()
{
	printf("%s\n",__FUNCTION__);
}

class Test {
public:
	Test(){ before_main(); }
	~Test(){ after_main(); }
}

Test test;  // 全局类变量,在main前调用构造,在main结束后,调用析构函数

int main(int argc,char **argv)
{
	printf("%s\n",__FUNCTION__);
	return 0;
}

 

   上面是用C++实现的,面试官问如果用C,如何实现,谷歌了一下,发现真有解决方案,只是利用了编译器一些特性实现罢了,不知这样面试可有意义.

   在GCC中,可以使用attribute关键字,声明constructor和destructor,代码如下:

   

// 可声明多个constructor,在main前调用多个函数
__attribute((constructor)) void before_main()
{
	printf("%s\n",__FUNCTION__);
}
__attribute((destructor)) void after_main()
{
	printf("%s\n",__FUNCTION__);
}
int main( int argc, char **argv )
{
	printf("%s\n",__FUNCTION__);
	return 0;
}

 

   在VC6中,不支持attribute关键字,可使用如下方法(未在vs2010下测试通过,after_main没有执行):

   

int main( int argc, char ** argv )
{
		printf("%s\n",__FUNCTION__);
		return 0;
}

int before_main()
{
		printf("%s\n",__FUNCTION__);
		return 0;
}
int after_main()
{
		printf("%s\n",__FUNCTION__);
		return 0;
}
typedef int func();
#pragma data_seg(".CRT$XIU")  // 定义共享数据段
static func *before[] = { before_main };
#pragma data_seg(".CRT$XPU")
static func *after[] = { after_main };
#pragma data_seg()

 

分享到:
评论

相关推荐

    C语言中怎么在main函数开始前执行函数

    C语言中怎么在main函数开始前执行函数呢?下面小编就大家详细的介绍一下。需要的朋友可以过来参考下,希望对大家有所帮助

    运行C程序总是从main函数开始。

    运行C程序总是从main函数开始。 2、C语句分为以下5类: (1) 控制语句。 1) if()…else… 条件语句 2) for()… 循环语句 3) while()… 循环语句 4) do…while() 循环语句 5) continue 结束本次循环语句 6) ...

    Android studio 运行main 函数的方法

    PS:下面通过示例代码看下JAVA中的main函数 package com.han; public class HanTest { public static void main(String[] args){ if(args==null){ throw new NullPointerException(The input is \null\); }...

    main函数之前和main之后都做了那些事情

    一个c程序在执行main函数之前和main之后都做了那些事情啊

    如何在 clion 运行多个 main 函数(方法详解)

    在写 C++ 的题目的时候经常会遇到这样的问题,写了多个 cpp 文件,在 clion 中编译报错不能同时存在多 main 函数 这里写了一个小程序优雅地解决这个问,非常简单,就是就是读字符串写文件 直接修改一下 CMake 自动...

    在程序main开始、结束之后执行代码

    一般代码只能从main方法开始,main结束后结束 这里给出一种方法,可以在main之前执行代码、在main结束后执行一些代码

    电子-在main函数里面先执行初始化SMBusInit以后每次要用直接SMBusReadTemp.zip

    电子-在main函数里面先执行初始化SMBusInit以后每次要用直接SMBusReadTemp.zip,单片机/嵌入式STM32-F0/F1/F2

    第一章从开机加电到Main函数执行前 《linux内核设计的艺术》的笔记内容

    第一章从开机加电到Main函数执行前 《linux内核设计的艺术》的笔记内容 BIOS --创建中断向量和中断描述符表,加载第一扇区代码bootsect bootsect 规划内存,加载第2--5扇区 setup,加载之后的大约240个扇区内核 开始向...

    __main函数内幕——从加载视图到执行视图.pdf

    非常不错的参考资料,看过了,现在分享一下

    解析在main函数之前调用函数以及对设计的作用详解

    前几天为新员工写一个简单的...特性介绍:如果想定义在main函数之前调用的函数,可以在函数的声明之后加上一句“__attribute__((constructor))”,如下:int before()__attribute__((constructor));如果想定义在main

    Python 没有main函数的原因

    在开始正题之前,先要来回答这两个问题:所谓的 “main 函数”是指什么?为什么有些编程语言需要强制写一个 main 函数? 某些编程语言以 main 函数作为程序的执行入口,例如 C/C++、C#、 Java、Go 和 Rust

    FFmpeg For Android (三) 移植main函数到安卓上执行ffmpeg命令

    FFmpeg For Android (三) 移植main函数到安卓上执行ffmpeg命令 完整源码 执行在安卓上执行ffmpeg命令, 示范了音频剪切和视频格式转换 有了它 你可以做很多有趣的app

    JavaScript学习笔记(三):JavaScript也有入口Main函数

    在C和Java中,都有一个程序的入口函数或方法,即main函数或main方法。而在JavaScript中,程序是从JS源文件的头部...具体来说,在执行流程进入函数时会建立一个新的作用域,在函数执行完成退出时会销毁这个作用域。函

    C语言选择题练习.doc

    A)本程序的main函数开始,到main函数结束 B)本程序文件的第-个函数开始,到本程序文件的最后-个函数结束 C)本程序的main函数开始,到本程序文件的最后-个函数结束 D)本程序文件的第-个函数开始,到本程序main函数...

    stm32标准库睡眠模式只中断不运行main函数

    1,DS0(连接在PB5),DS1(连接在PE5) 2,蜂鸣器(连接在PB8) 3,按键KEY0(PE4)/KEY1(PE3)/KEY2(PE2)/KEY_UP(PA0,也称之为WK_UP) 实验现象: 本实验,利用外部中断,实现与实验3类似的效果,即:通过开发板上载有的4个...

    .NET中函数Main的使用技巧

    最近在使用pandoc这个文档转换软件,能够对各种文档进行完美的转换,比如从markdown文件转为doc,ppt,tex,odt等等各种,感兴趣的可以从Pandoc下载,对于pandoc的的文档转换,都是使用cmd中的命令来进行操作的。...

    握函数的概念

    程序总是从main函数开始执行的。在程序运行过程中,由主函数调用其他函数,其他函数也可以互相调用。在C语言中没有类和对象,在程序模块中直接定义函数。可以认为,一个C程序是由若干个函数组成的,C语言被认为是...

    bat 运行java main方法

    源代码,jar包及bat文件,注意:bat文件中不能有空格。

    C++的全局构造与析构函数

    但是不然,在main函数开始执行前,已经有其他的指令被执行了。  为了程序的顺利执行,首先要初始化执行环境,比如堆分配初始化(malloc, free) ,线程子系统等,这里先提一下:C++ 的全局对象构造函数是在这一...

Global site tag (gtag.js) - Google Analytics