attribute constructor&destructor

attribute constructor&destructor

在看openwrt里libnl-tiny这个库的时候,遇到了C里面的构造函数这个概念。

static void __init init_msg_size(void)
{
default_msg_size = getpagesize();
}

这个static函数没有显示被其它地方调用,但确用了__init修饰。__init定义在include/netlink-local.h中:

define __init attribute ((constructor))

define __exit attribute ((destructor))

写一个测试函数

include <stdio.h>

define __init attribute ((constructor))

define __exit attribute ((destructor))

static __init void before(void)
{
printf("before\n");
}

static __exit void after(void)
{
printf("after\n");
}

int main(void)
{
printf("main\n");
return 0;
}

打印结果为:

$ ./hello
before
main
after

还可以定义优先级:

include <stdio.h>

define __init101 attribute ((constructor(101)))

define __init102 attribute ((constructor(102)))

define __exit101 attribute ((destructor(101)))

define __exit102 attribute ((destructor(102)))

static __init101 void before101(void)
{
printf("%s\n", func);
}

static __init102 void before102(void)
{
printf("%s\n", func);
}

static __exit101 void after101(void)
{
printf("%s\n", func);
}

static __exit102 void after102(void)
{
printf("%s\n", func);
}

int main(void)
{
printf("%s\n", func);
return 0;
}

打印结果为:

$ ./hello
before101
before102
main
after102
after101

优先级0~100被保留,自定义的优先级从101开始。

posted @ 2014-09-26 13:05  sammei  阅读(425)  评论(0)    收藏  举报