使用GCC系列C编译器,我们可以在main()之前和之后标记一些要执行的函数。因此,一些启动代码可以在main()启动之前执行,一些清理代码可以在main()结束之后执行。例如,在以下程序中,myStartupFun()在main()之前调用,myCleanupFun(。
#include<stdio.h>
/* Apply the constructor attribute to myStartupFun() so that it
is executed before main() */
void myStartupFun (void) __attribute__ ((constructor));
/* Apply the destructor attribute to myCleanupFun() so that it
is executed after main() */
void myCleanupFun (void) __attribute__ ((destructor));
/* implementation of myStartupFun */
void myStartupFun (void)
{
printf ("startup code before main()\n");
}
/* implementation of myCleanupFun */
void myCleanupFun (void)
{
printf ("cleanup code after main()\n");
}
int main (void)
{
printf ("hello\n");
return 0;
}
Output:
startup code before main()
hello
cleanup code after main()
与上述特性类似,GCC为标准C语言添加了许多其他有趣的特性。
>> 本文固定链接: http://www.vcgood.com/archives/4829