C語言中,同一個函數能不能被定義兩次?
稍微有點C語言基礎的同學,一定知道不能這樣做。
最近有同學在學習STM32,他就發現了這么一個問題,有些函數前面加了 __weak,然后這個函數就可以被重新定義。
這種情況常見于中斷函數里面,意思就是用戶可以自己定義,也可以用系統提供的。
__weak并不是C語言里面的關鍵字,具體的實現還是得看編譯器。
比如在keil里面,__weak就是一個宏定義,使用了C語言里面的 attribute 機制,這個機制我們在前面也講過,里面可以用 packed aligned unused 等等。
今天我們再來補充一個,weak。
比如在 test.c 文件中定義了函數 test,如果在 main.c 里面又定義了一次,那編譯的時候,肯定會提示函數重復定義,一個函數不能被定義兩次。
但是如果在某個 test 函數前面加上 __attribute__((weak)),編譯就能順利通過。
并且運行的時候,默認調用的也是前面沒有 weak 修飾的函數。
weak 就是告訴編譯器,該函數為弱定義,作為備選,如果用戶自己定義了,還是優先調用用戶定義的函數。
審核編輯:劉清
-
STM32
+關注
關注
2290文章
11017瀏覽量
362478 -
C語言
+關注
關注
180文章
7630瀏覽量
140478
原文標題:函數也能重復定義
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
評論