weak-alias
- 是一个宏,其目的是为函数添加一个”弱”别名,与”强”符号函数名区分。
- 说明, 如果调用函数无对应的函数无”强”符号对应的函数,则会调用该别名对应的函数
- C/C++ 函数调用是以编译后的”符号”做索引调用,详情了解 <符号表>
#define weak_alias(name, aliasname) _mweak_alias(name, aliasname)
#define _weak_alias(name, aliasname) \
extern __typeof(name) aliasname __attribute__((weak, alias(#name)));
- 所谓”强”符号函数名就是,普通声明定义的函数对应的函数名
例如:
#include <stdio.h>
void print_hello(const char *s)
{
printf("print_hello: %s\n", s);
}
print_hello 就是一个”强”函数符号
以下测试两种情况
__weak_hello 有两个”弱符号”
print_hello 有对应的实体函数 而 print_world 则无
#include <stdio.h>
void print_hello(const char *s) __attribute__((weak, alias("__weak_hello")));
void print_world(const char *s) __attribute__((weak, alias("__weak_hello")));
void __weak_hello(const char *)
{
printf("__weak_hello: %s\n", s);
}
int main(void)
{
print_hello("main test print_hello");
print_world("main test print_world");
return 0;
}
- 编译运行测试
$ gcc strong.c weak.c main.c && ./a.out
print_hello: main test print_hello
__weak: main test print_world
$
可见 当调用函数有对应的”强”符号,则调用,若无则会尝试寻找其”weak”对应的函数,若再无则编译会报错 找不到该函数
End
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)