__attribute__((weak))
时间: 2023-03-16 11:49:16 浏览: 76
__attribute__((weak))是GCC编译器的一个扩展属性,它可以用于标识一个函数或变量的弱符号(weak symbol)属性。
弱符号是一种在链接时可以被重载或被覆盖的符号,它与强符号(strong symbol)相对。当一个强符号和一个弱符号同名时,链接器会选择使用强符号。
在C/C++中,通过在函数或变量的声明或定义前添加__attribute__((weak))属性,可以将其标记为弱符号。例如:
```
void foo() __attribute__((weak));
int bar __attribute__((weak));
```
这样,如果在链接时出现了多个同名的符号,链接器会选择使用最强的符号,如果都是弱符号,则任意选择一个。这种机制可以用于在编译时指定默认实现,并在链接时允许替换默认实现。
需要注意的是,__attribute__((weak))属性只在GCC编译器下有效,在其他编译器下可能不支持。
相关问题
__WEAK_FUNC
__WEAK_FUNC是一个函数修饰符,它允许用户在另一个文件中定义一个与修饰过的函数完全相同的函数。如果用户没有重新实现这个函数,则编译器将执行带有__WEAK_FUNC修饰符的函数。下面是一个例子:
假设我们有两个文件A.cpp和B.cpp,其中A.cpp包含以下内容:
```c++
#include <stdio.h>
extern void func();
void __attribute__((weak)) func() {
printf("int fake func\n");
}
void main() {
func();
}
```
B.cpp包含以下内容:
```c++
#include <stdio.h>
void func() {
printf("int real func\n");
}
```
当编译器编译这两个文件时,它将选择B.cpp中定义的func()函数,因为它与A.cpp中的带有__WEAK_FUNC修饰符的函数完全相同。因此,当我们运行A.cpp时,它将输出“int real func”。
__attribute__(weak)
__attribute__((weak))是一个GCC编译器的特性,用于声明函数或变量为弱符号引用。在使用该特性时,可以在调用某个模块的函数时,即使该函数在该模块中未定义也不会报重复定义的错误。
举个例子,如果在模块A中调用了模块B的函数,但是模块B的函数可能未定义,可以在模块A中使用__attribute__((weak))来声明需要调用的函数为弱符号引用。这样,在模块A的代码中,可以通过检查该函数的指针是否为NULL来判断该函数是否存在,从而避免因为函数未定义而导致的错误。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [ARM 之十一__weak 代码 WEAK.7z](https://download.csdn.net/download/ZCShouCSDN/12572659)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [__attribute__系列之__attribute__((weak))](https://blog.csdn.net/weixin_45367955/article/details/130532947)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [__attribute__((weak))介绍以及用法](https://blog.csdn.net/weixin_42031299/article/details/116269010)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]