__WEAK_FUNC
时间: 2023-12-01 14:04:01 浏览: 37
__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”。
相关问题
SYM_FUNC_START_ALIAS和SYM_FUNC_START_WEAK_PI区别
SYM_FUNC_START_ALIAS和SYM_FUNC_START_WEAK_PI都是符号定义宏,主要用于定义函数符号。它们的区别在于:
1. SYM_FUNC_START_ALIAS宏定义的符号是强符号,即在链接过程中如果出现相同名称的符号,则会出现链接错误。这种符号通常用于定义全局函数或变量。
2. SYM_FUNC_START_WEAK_PI宏定义的符号是弱符号,即在链接过程中如果出现相同名称的符号,则会忽略掉该符号,而使用其他同名符号。这种符号通常用于定义可选的函数或变量,如果已经有同名符号,则使用已有符号,否则使用该符号。
因此,如果您需要定义一个必须存在且不能重复定义的符号,可以使用SYM_FUNC_START_ALIAS宏。如果您需要定义一个可选的符号,如果已经存在同名符号则使用已有符号,否则使用该符号,则可以使用SYM_FUNC_START_WEAK_PI宏。
c语言中__attribute__
__attribute__是C语言中的一个编译属性,用于向编译器描述特殊的标识、错误检查或高级优化。它可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)等。下面是一些__attribute__的使用方法和示例:
1. 设置变量对齐方式为4字节对齐
```c
struct p {
int a;
char b;
char c;
} __attribute__((aligned(4))) pp;
```
这里使用了aligned属性,指定了pp结构体变量的对齐方式为4字节对齐。由于pp结构体中只有一个int类型的变量和两个char类型的变量,所以在4字节对齐的情况下,pp结构体变量的大小为8字节。
2. 设置变量为弱符号
```c
int foo() __attribute__((weak));
```
这里使用了weak属性,将foo函数设置为弱符号。如果在链接时没有找到foo函数的定义,那么foo函数将被设置为NULL。
3. 设置函数为热点函数
```c
void hot_func() __attribute__((hot));
```
这里使用了hot属性,将hot_func函数设置为热点函数。热点函数是指在程序中被频繁调用的函数,使用hot属性可以让编译器对这些函数进行优化,提高程序的性能。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)