天天看點

C:__attribute__ weak 的作用

關于 weak

weak

經常出現在各種

c

代碼中,其作用是将目前檔案的對應函數聲明為弱函數符号,如果外部檔案出現相同的函數名,最終編譯出來的

檔案會優先指向外部檔案的函數符号;

通常需要使用

__attribute__

,不知道标準C有沒有這樣的用法;具體如下所示;

或者

Freertos

的源碼的時候,發現了它;

C:__attribute__ weak 的作用

glibc

的源碼的時候,發現了它;

C:__attribute__ weak 的作用

測試

于是為了一探究竟,簡單地寫了一下代碼測試;

  • a.c

    中的

    foo(void)

    函數為弱定義;
  • b.c

    中的

    foo(void)

    函數為強定義;

a.c

C:__attribute__ weak 的作用

b.h

C:__attribute__ weak 的作用

b.c

C:__attribute__ weak 的作用

最終輸出結果顯示

b.c,foo,4

C:__attribute__ weak 的作用

可見列印的資訊的

foo

函數在

b.c

的第四行;是以,

b.c

中的

foo

函數作為強函數符号,最終被編譯到可執行程式中;可以最終結果驗證前面的結論。

繼續閱讀