2012-04-23 66 views
3

我讀代碼來定義中斷向量爲STM32 here。出於某種原因,既__attribute__((weak))#pragma weak使用:爲什麼要使用__attribute __((弱))和#pragma弱?

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

不知怎的,它認爲,同時使用__attribute__((weak))#pragma weak是多餘的。

可以沒有他們中的一個?這是款式標準嗎?

回答

2

你是對的,但...

#pragma weak NMI_Handler = Default_Handler 
單獨

能做到什麼打算。 但是這將是很好的補充__attribute__((weak))的函數原型原因如下 -

假設該文件是灑了一檔巨大的一個有定義和原型。現在,您使用的IDE /編輯器跳轉到NMI_Handler原型,當你到達那裏並沒有看到連接到NMI_Handler__attribute__((weak))你不妨假設NMI_Handler定義別的地方去鵝追捕無處結束了!現在,他們已經明確添加__attribute__((weak)),你會得到一個想法,這個函數的定義可能不會有,你現在可以搜索,而不是試圖尋找一種不函數的實際定義爲任何編譯別名/可不存在!