作者sb5471 (sb)
看板C_and_CPP
標題[問題] 移除inline func裡 static 變數 warning
時間Thu Jun 25 00:28:39 2015
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
OS : Ubuntu 14.04 LTS
toolchain : arm-none-eabi
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
無
問題(Question):
porting 他人程式, compile 後出現 warning, 想將它移除.
compile msg 片段:
http://pastie.org/10256821
該程式裡有很多 "inline function + 裡面含 static variable" 的寫法
舉例: a.c & b.c & c.c 裡皆有使用到 my_func()
inline void my_func(void)
{
static int s_var = 1;
do_something();
// 會使 s_var 值發生改變
}
> arm-none-eabi-gcc main.c a.c b.c c.c
Q1: warning msg 有 "[enabled by default]" 字樣.
意思是不是 arm-none-eabi-gcc 會自動將 my_func() 改成這樣:
=> static inline void my_func(void) ??
Q2: 承上, 這代表 build 出來的 a.c & b.c & c.c 裡, 都有各自一份
s_var 嗎??
Q3: 如果我希望 a.c & b.c & c.c (或是說, 最終的執行檔 a.out)
只 share 同一份 s_var 的話, 請問要怎麼改?
a). 將 s_var 宣告在 my_func() 外??
b). 將 inline 拿掉 ?
c). 還是, 根本就做不到 ??
餵入的資料(Input):
無
預期的正確結果(Expected Output):
無
錯誤結果(Wrong Output):
無
程式碼(Code):(請善用置底文網頁, 記得排版)
無
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.43.190.172
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1435163324.A.B09.html
※ 編輯: sb5471 (114.43.190.172), 06/25/2015 00:29:51
→ azureblaze: inline拔掉,函數內容寫到另外個c裡 06/25 00:31
→ sb5471: 弄一個d.c, 然後 my_func的inline拿掉+移到 d.c, 是這樣?? 06/25 00:34
→ sb5471: 如果考慮效能, 希望能保留"inline"的能力, 也就是 06/25 00:38
→ sb5471: build 出來的 code, 盡量減少 function call 的情況 06/25 00:39
→ sb5471: 有辦法做到嗎? 06/25 00:39
→ azureblaze: 主流的compiler根本不太鳥inline這個keyword 06/25 00:43
→ azureblaze: 放不同檔案沒加inline,code還是可能直接插進去 06/25 00:43
→ azureblaze: 最佳化開起來,看看assembly有沒有處理吧 06/25 00:44
→ EdisonX: 對! compiler 開最佳化後 , 很多都會自己做 inline , 反 06/25 01:13
→ EdisonX: 而 coder 寫的 inline "可能" 無視 (自己做的比較好 ?) 06/25 01:13