gpt4 book ai didi

c - 为什么使用 __attribute__((weak)) 和#pragma weak?

转载 作者:行者123 更新时间:2023-12-04 11:38:34 28 4
gpt4 key购买 nike

我正在阅读为 STM32 定义中断 vector 的代码 here .出于某种原因,同时使用了 __attribute__((weak))#pragma weak:

void __attribute__((weak)) NMI_Handler(void); /* NMI Handler */ // [line 12]
#pragma weak NMI_Handler = Default_Handler /* NMI handler */ // [line 48]

不知何故,感觉同时使用 __attribute__((weak))#pragma weak 是多余的。

我们可以没有其中之一吗?这种风格标准吗?

最佳答案

你是对的,但是......

#pragma weak NMI_Handler = Default_Handler 

一个人就可以完成预期的目标。 但最好将 __attribute__((weak)) 添加到函数原型(prototype)中,原因如下 -

假设文件很大,定义和原型(prototype)遍布文件各处。现在您使用 IDE/编辑器跳转到 NMI_Handler 的原型(prototype),当您到达那里时没有看到 __attribute__((weak)) 附加到 NMI_Handler 您还不如假设 NMI_Handler 是在其他地方定义的,然后继续寻找鹅,结果一无所获!现在,由于他们已经显式添加了 __attribute__((weak)),您会认为这个函数的定义可能不存在,您现在可以搜索任何 pragma 别名而不是试图找到不存在/可能不存在的函数的实际定义!

关于c - 为什么使用 __attribute__((weak)) 和#pragma weak?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10279261/

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