鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 编程语言开发 > c语言 > >

特殊的attribute机制

来源:互联网 作者:佚名 时间:2013-12-23 15:57
__attribute__机制是GNU C的一大特色,可以用来设置函数,变量和数据类型的属性,下面对工作中正好用到的两个属性做下简单介绍。 1. constructor 这个属性指定函数在main函数执行之前执行 static void RunBeforeMain( void ) __attribute__ ((constructor));

__attribute__机制是GNU C的一大特色,可以用来设置函数,变量和数据类型的属性,,下面对工作中正好用到的两个属性做下简单介绍。

1. constructor

这个属性指定函数在main函数执行之前执行

static void RunBeforeMain(void) __attribute__ ((constructor)); void RunBeforeMain(void){ printf(“%s \n”, __FUNCTION__); } int main(void){ printf(“%s\n”,__FUNCTION__); return 0; }

输出顺序如下:

RunbeforeMain

main

 

2. weak, alias

weak: weak symbol. 若存在两个相同的全局符号时,会引发重定义错误. 如果使用weak attribute,则当weak symbol和non-weak symbol同时存在的时候,linker会使用non-weak symbol.若只有weak symbol存在的时候则只使用weak symbol.

alias: 设置函数的别名,如

)));

将example函数设为__example的别名

这两个属性结合起来使用可以在non-weak symbol没有声明的情况下仍然编译执行成功。

//strong.c

#include <stdio.h>

void StrongFun ( ) { printf(, __FILE__,__FUNCTION__); }

//weak.c

#include <stdio.h> ))); void WeakFun ( ) { printf(, __FILE__, __FUNCTION__); } int main(int argc, char **argv){ StrongFun(); return 0; }

单独链接时,

gcc -o weak weak.o

./weak

输出结果:

weak.c:WeakFun

同时链接时,

gcc -o strong weak.o strong.o

./strong

输出结果

strong.c:StrongFun

网友评论
<