浅尝辄止22-C语言属性-alias

C语言符号是可以偷梁换柱的

属性

C语言里有时会看到__attribute__这个东西,它就是表示要描述属性了。
gcc的通用属性可以参考Common-Function-Attributes

alias

alias属性可以给符号起一个别名,两个名字用起来就会是一样的效果。

extern 类型 新名字 __attribute__((alias("旧名字")));

代码演示

  • 代码中有一个void test(int value)函数的完整定义,main函数对其进行了调用,传值为0
  • IAmNotTest是一个新名字,它和test是等价的
  • IAmNotTestTo也是个新名字,这里用typeof(IAmNotTest)来声明它的类型,就不用写成函数形式了
#include 

void IAmNotTest(int value) __attribute__((alias("test")));
typeof(IAmNotTest) IAmNotTestToo __attribute__((alias("test")));
void test(int value){
    printf("I am No.%d\n", value);
}
int main()
{
    test(0);
    IAmNotTest(1);
    IAmNotTestToo(2);
    return 0;
}

输出

I am No.0
I am No.1
I am No.2

三个名字都可以调用到原始函数,所以每个名字都是有效的。

为什么IAmNotTest的声明可以在test前面?

你可能感兴趣的:(浅尝辄止22-C语言属性-alias)