gcc定义了自己的可以用于修饰变量,函数及类型的属性,格式为:__attribute__ ((attribute-list))
__attribute__((constructor))用于修饰的函数会在main之前就被执行
__attribute__((destructor))用于修饰的函数会在mian完成之后被执行
#include <iostream>
#include <string>
using namespace std;
static int s_data = 1;
int main()
{
s_data++;
cout<<"main, s_data="<<s_data<<endl;
s_data++;
return 0;
}
__attribute__((constructor)) static void beforeFunction()
{
cout<<"beforeFunction, s_data="<<s_data<<endl;
}
__attribute__((destructor)) static void afterFunction()
{
cout<<"afterFunction, s_data="<<s_data<<endl;
}
运行程序输出:
beforeFunction, s_data=1
main, s_data=2
afterFunction, s_data=3
可以看到,beforeFuncti