3

我在这里阅读代码来定义 STM32 的中断向量。出于某种原因,两者__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多余的。

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

4

1 回答 1

2

你是对的,但是...

#pragma weak NMI_Handler = Default_Handler 

独自一人可以完成预期的事情。但是出于以下原因添加到函数原型中会很好-__attribute__((weak))

假设该文件是一个巨大的文件,其定义和原型遍布整个文件。现在,您使用 IDE/Editor 跳转到原型,NMI_Handler当您到达那里并没有看到__attribute__((weak))附加到NMI_Handler您的时候,不妨假设它NMI_Handler是在其他地方定义的,然后继续寻找目标并最终无处可去!现在,正如他们明确添加的那样__attribute__((weak)),您会知道该函数的定义可能不存在,您现在可以搜索任何杂注别名,而不是尝试查找不/可能不存在的函数的实际定义!

于 2012-04-23T11:24:23.543 回答