今天在查看准备优化嵌入式代码的时候,发现嵌入式中使用了弱符号类型__attribute__((weak)),但是有些小伙伴还不知道这个到底啥用处,那么下面对__attribute__((weak))就进行一下简单的讲解。
一般我们会在自己的C模块中调用外部的接口,如果在不包含头文件.h的时候,一般会进行外部声明:
extern int add(int a, int b); // 优先使用强符号类型,找不到可以使用弱符号类型,具体看该模块有没有提供该弱符号类型的定义
然后会在我们的b.c中进行调用
int a = 1;
int b = 2;
int sum = add(a,b);
在编译的阶段不会有任何问题,但是在链接的时候,所有的符号都有找到定义,那么会出现找不到外部符号链接的情况,而导致在链接的时候报错。
只要我们在自己的模块进行如下定义:
#include "csys/libcsysapi.h"
#include "libccustomapi.h"
__attribute__((weak)) int add(int a, int b)
{
return -1;
}
此时我们的b.c模块中add接口转成弱符号类型,如果没有遇到强符号类型(外部模块定义的add),那么我们就是用自己模块内部的弱符号类型add