今天在查看准备优化嵌入式代码的时候,发现嵌入式中使用了弱符号类型__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