使用GCC扩展attribute,在main函数外进行操作
2015-08-08 17:01
465 查看
以前知道这个GCC扩展特性,但是一直没有试过。今天写了个小的测试程序试验一下。
#include <stdlib.h>
#include <stdio.h>
static void __attribute__ ((constructor)) my_init()
{
printf("my_init\n");
}
static void __attribute__ ((destructor)) my_fini()
{
printf("my_fini\n");
}
static void exit_clean()
{
printf("exit_clean\n");
}
int main()
{
atexit(exit_clean);
printf("Enter main\n");
return 0;
}
执行结果为:
my_init
Enter main
exit_clean
my_fini
可见,使用__attribute__((constructor))可以使函数在main之前被执行,而__attribute((destructor))可以在main函数执行完毕后执行。其实这两个扩展特性,主要是GCC为C++的全局类的构造和析构函数准备的。但是对于C来说,在特定的情况下,我们同样也可以使用这两个扩展特性,来完成一些特殊的需求。
#include <stdlib.h>
#include <stdio.h>
static void __attribute__ ((constructor)) my_init()
{
printf("my_init\n");
}
static void __attribute__ ((destructor)) my_fini()
{
printf("my_fini\n");
}
static void exit_clean()
{
printf("exit_clean\n");
}
int main()
{
atexit(exit_clean);
printf("Enter main\n");
return 0;
}
执行结果为:
my_init
Enter main
exit_clean
my_fini
可见,使用__attribute__((constructor))可以使函数在main之前被执行,而__attribute((destructor))可以在main函数执行完毕后执行。其实这两个扩展特性,主要是GCC为C++的全局类的构造和析构函数准备的。但是对于C来说,在特定的情况下,我们同样也可以使用这两个扩展特性,来完成一些特殊的需求。
相关文章推荐
- adb opendir failed,Permission denied
- HDU 1983 Kaitou Kid - The Phantom Thief (2) bfs and dfs
- [leetcode] Container With Most Water
- HDU 2473 Junk-Mail Filter(删点)
- 2015 Multi-University Training Contest 5 1009 模板
- 2015 HUAS Summer Trainning #4~B
- opencv waitkey使用注意点
- LeetCode(70)题解: climbing-stairs
- 使用Genymotion调试出现错误INSTALL_FAILED_CPU_ABI_INCOMPATI
- POJ 3007 Organize Your Train part II(枚举)
- uva 529 - Addition Chains
- Snail—1-9这9个数字划分成三个3位数,第一个分别是第二、三个的2倍,3倍
- Spartan6 slave SelectMap configuration fails owing to JTAG?
- JBoss 4.2 MBeans waiting for other MBeans (PersistenceUnit)
- HDU 5358 First One( 2015 Multi-University Training Contest 6)
- fzu 1001 Duplicate Pair
- fzu 1001 Duplicate Pair
- Thai language
- [CareerCup] 4.8 Contain Tree 包含树
- scala学习之:trait的理解