gpt4 book ai didi

c - 什么是弱函数,它们的用途是什么?我正在使用 stm32f429 微 Controller

转载 作者:行者123 更新时间:2023-12-03 13:43:52 24 4
gpt4 key购买 nike

维基百科说:

A weak symbol denotes a specially annotated symbol during linking of Executable and Linkable Format (ELF) object files. By default, without any annotation, a symbol in an object file is strong. During linking, a strong symbol can override a weak symbol of the same name. In contrast, two strong symbols that share a name yield a link error during link-time. When linking a binary executable, a weakly declared symbol does not need a definition. In comparison, (by default) a declared strong symbol without a definition triggers an undefined symbol link error. Weak symbols are not mentioned by C or C++ language standards; as such, inserting them into code is not very portable. Even if two platforms support the same or similar syntax for marking symbols as weak, the semantics may differ in subtle points, e.g. whether weak symbols during dynamic linking at runtime lose their semantics or not.



什么是弱函数,它们的用途是什么?我正在使用 stm32f429 微 Controller 。库中有一些弱函数。但我无法理解,它们是什么以及它们的用途!

我在谷歌上搜索了它,但没有得到满意的答案。

最佳答案

当函数前面带有描述符 __weak 时,它基本上意味着如果您(编码器)没有定义它,它会在此处定义。

让我们来看看我的死敌“HAL_UART_RxCpltCallback()”。

该函数存在于 STM32F4-HAL 代码库的 HAL 中,您可以从 ST-Micro 下载该代码库。

在文件 stm32f4xx_hal_uart.c 文件中,您会发现此函数定义为:

__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
/* NOTE: This function Should not be modified, when the callback is needed,
the HAL_UART_RxCpltCallback could be implemented in the user file
*/
}

因此,正如此处代码中的注释所说,将此函数放在您自己的用户文件中。但是,当你这样做时,不要输入 __weak学期。这意味着链接器将采用您对 HAL_UART_RxCpltCallback() 函数的定义,而不是在 stm32f4xx_hal_uart.c 文件中定义的函数。

这使通用代码库能够始终编译。您不必编写一大堆您不感兴趣的函数,但它会编译。当需要编写自己的时,您只需不要将您的定义为 __weak并写下来。

简单的?有用吗?

干杯!!

关于c - 什么是弱函数,它们的用途是什么?我正在使用 stm32f429 微 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35507446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com