怎么在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()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值