C語言中怎么在main函數(shù)開始前執(zhí)行函數(shù)
在gcc中,可以使用attribute關(guān)鍵字,聲明constructor和destructor,代碼如下:
#include <stdio.h>
__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關(guān)鍵字,在vc中,可以使用如下方法:
#include <stdio.h>
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()
編譯執(zhí)行,上述兩段代碼的結(jié)果均為:
before_main
main
after_main
可以在main前后調(diào)用多個函數(shù),在gcc下使用attribute聲明多個constructor、destructor,vc下在before、after數(shù)組中添加多個函數(shù)指針。
相關(guān)文章
C語言中send()函數(shù)和sendto()函數(shù)的使用方法
這篇文章主要介紹了C語言中send()函數(shù)和sendto()函數(shù)的使用方法,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-09-09C++子類父類成員函數(shù)的覆蓋和隱藏實(shí)例詳解
這篇文章主要介紹了C++子類父類成員函數(shù)的覆蓋和隱藏實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06C++實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(Map實(shí)現(xiàn))
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-06-06C++實(shí)現(xiàn)文件逐行讀取與字符匹配的示例詳解
這篇文章主要為大家詳細(xì)介紹了如何溧陽C++實(shí)現(xiàn)文件逐行讀取與字符匹配的功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的可以參考一下2023-03-03Visual?Studio?Code?配置C、C++?文件debug調(diào)試環(huán)境的詳細(xì)過程
這篇文章主要介紹了Visual?Studio?Code?配置C、C++?文件debug調(diào)試環(huán)境,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02C語言實(shí)現(xiàn)24點(diǎn)游戲計(jì)算器的示例代碼
24點(diǎn)是一種益智游戲,24點(diǎn)是把4個整數(shù)(一般是正整數(shù))通過加減乘除以及括號運(yùn)算,使最后的計(jì)算結(jié)果是24的一個數(shù)學(xué)游戲,24點(diǎn)可以考驗(yàn)人的智力和數(shù)學(xué)敏感性,它能在游戲中提高人們的心算能力。本文將用C語言實(shí)現(xiàn)這一游戲,感興趣的可以了解一下2022-08-08