2019年12月20日 星期五

c++ inline function 裡頭 static object 會有幾份?

inline function 在 c (c99 之後), c++ 都可以使用, 只要在 function 前面加上 inline 即可。

C11 standard (ISO/IEC 9899:2011):
6.7.4 Function specifiers (p: 125-127)
C99 standard (ISO/IEC 9899:1999):
6.7.4 Function specifiers (p: 112-113)

而 c, c++ 的 inline 有點不同,

list 1. no_static_inline.err
1 /usr/bin/x86_64-linux-gnu-ld: /tmp/ccqLHrwj.o: in function `main':
2 x.c:(.text+0x15): undefined reference to `f1'
3 /usr/bin/x86_64-linux-gnu-ld: /tmp/cctzg49W.o: in function `call_f1':
4 y.c:(.text+0xa): undefined reference to `f1'
5 collect2: error: ld returned 1 exit status

c 的 inline 如果定義在 .h, 一定要加上 static, 否則會有 list 1 的錯誤。
c++ 的 inline 不需要加上 static, 但如果加上 static 也是可以, 但是加上了 static inline 的 c++ inline function, 對於 inline function 裡頭的 static ojbect, 會有不一樣的行為。

參考: static variables in an inlined function

沒有 static 的 inline function, function 中的 static object 只會有一個, 但是加上了 static 的 inline function, inline function 被包含了幾次, 就會有幾個 static object。

source code:
https://github.com/descent/progs/tree/master/inline_function_with_static_obj

沒有留言:

張貼留言

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。