關于 weak
weak
經常出現在各種
c
代碼中,其作用是将目前檔案的對應函數聲明為弱函數符号,如果外部檔案出現相同的函數名,最終編譯出來的
檔案會優先指向外部檔案的函數符号;
通常需要使用
__attribute__
,不知道标準C有沒有這樣的用法;具體如下所示;
或者
看
Freertos
的源碼的時候,發現了它;
看
glibc
的源碼的時候,發現了它;
測試
于是為了一探究竟,簡單地寫了一下代碼測試;
-
中的a.c
函數為弱定義;foo(void)
-
中的b.c
函數為強定義;foo(void)
a.c
b.h
b.c
最終輸出結果顯示
b.c,foo,4
可見列印的資訊的
foo
函數在
b.c
的第四行;是以,
b.c
中的
foo
函數作為強函數符号,最終被編譯到可執行程式中;可以最終結果驗證前面的結論。