[問題] 移除inline func裡 static 變數 warning

看板C_and_CPP (C/C++)作者 (sb)時間10年前 (2015/06/25 00:28), 10年前編輯推噓0(0010)
留言10則, 3人參與, 最新討論串1/1
開發平台(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

06/25 00:31, , 1F
inline拔掉,函數內容寫到另外個c裡
06/25 00:31, 1F

06/25 00:34, , 2F
弄一個d.c, 然後 my_func的inline拿掉+移到 d.c, 是這樣??
06/25 00:34, 2F

06/25 00:38, , 3F
如果考慮效能, 希望能保留"inline"的能力, 也就是
06/25 00:38, 3F

06/25 00:39, , 4F
build 出來的 code, 盡量減少 function call 的情況
06/25 00:39, 4F

06/25 00:39, , 5F
有辦法做到嗎?
06/25 00:39, 5F

06/25 00:43, , 6F
主流的compiler根本不太鳥inline這個keyword
06/25 00:43, 6F

06/25 00:43, , 7F
放不同檔案沒加inline,code還是可能直接插進去
06/25 00:43, 7F

06/25 00:44, , 8F
最佳化開起來,看看assembly有沒有處理吧
06/25 00:44, 8F

06/25 01:13, , 9F
對! compiler 開最佳化後 , 很多都會自己做 inline , 反
06/25 01:13, 9F

06/25 01:13, , 10F
而 coder 寫的 inline "可能" 無視 (自己做的比較好 ?)
06/25 01:13, 10F
文章代碼(AID): #1LYjgyi9 (C_and_CPP)
文章代碼(AID): #1LYjgyi9 (C_and_CPP)