【问题标题】:Why use __attribute__((weak)) and #pragma weak?为什么使用 __attribute__((weak)) 和 #pragma weak?
【发布时间】:2012-04-23 19:24:23
【问题描述】:

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

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

【问题讨论】:

    标签: c


    【解决方案1】:

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

    #pragma weak NMI_Handler = Default_Handler 
    

    单独可以完成预期的事情。 但最好将__attribute__((weak)) 添加到函数原型中,原因如下 -

    假设该文件是一个巨大的文件,其定义和原型遍布整个文件。现在您使用 IDE/Editor 跳转到 NMI_Handler 的原型,当您到达那里并没有看到 __attribute__((weak)) 附加到 NMI_Handler 时,您不妨假设 NMI_Handler 在其他地方定义并继续一场鹅狩猎,最终无处可去!现在,由于他们明确添加了__attribute__((weak)),您会发现此函数的定义可能不存在,您现在可以搜索任何 pragma 别名,而不是尝试查找实际的定义不存在/可能不存在的函数!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-26
      • 1970-01-01
      • 2019-08-09
      • 1970-01-01
      • 2016-02-18
      • 2021-12-05
      • 2012-09-05
      相关资源
      最近更新 更多