在gcc中,可以使用attribute关键字,声明constructor和destructor,代码如下:
-
#include
-
-
__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;
-
}
vc不支持attribute关键字,在vc中,可以使用如下方法:
-
#include
-
-
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()
编译执行,上述两段代码的结果均为:
before_main
main
after_main
可以在main前后调用多个函数,在gcc下使用attribute声明多个constructor、destructor,vc下在before、after数组中添加多个函数指针。
阅读(879) | 评论(0) | 转发(0) |