为什么要使用__attribute __((弱))和#pragma weak?

时间:2012-04-23 10:59:47

标签: c

我正在阅读代码来定义STM32 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是多余的。

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

1 个答案:

答案 0 :(得分:2)

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

#pragma weak NMI_Handler = Default_Handler 
只有

才能完成预期目标。 但是,由于以下原因,将__attribute__((weak))添加到函数原型 会很好 -

假设文件是​​一个巨大的文件,定义和原型溢出整个文件。现在您使用IDE /编辑器跳转到NMI_Handler的原型,当您到达那里并且没有看到__attribute__((weak))附加到NMI_Handler时,您可能会认为NMI_Handler }被定义在其他地方并继续进行鹅狩猎并最终无处可去!现在,当他们明确添加__attribute__((weak))时,您会发现此函数的定义可能不存在,您现在可以搜索任何编译指示别名而不是尝试查找实际定义没有/可能不存在的功能!