[问题] 移除inline func里 static 变量 warning

楼主: sb5471 (sb)   2015-06-25 00:28:39
开发平台(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):
作者: azureblaze (AzureBlaze)   2015-06-25 00:31:00
inline拔掉,函数内容写到另外个c里
楼主: sb5471 (sb)   2015-06-25 00:34:00
弄一个d.c, 然后 my_func的inline拿掉+移到 d.c, 是这样??如果考虑效能, 希望能保留"inline"的能力, 也就是build 出来的 code, 尽量减少 function call 的情况有办法做到吗?
作者: azureblaze (AzureBlaze)   2015-06-25 00:43:00
主流的compiler根本不太鸟inline这个keyword放不同档案没加inline,code还是可能直接插进去最佳化开起来,看看assembly有没有处理吧
作者: EdisonX (卡卡兽)   2015-06-25 01:13:00
对! compiler 开最佳化后 , 很多都会自己做 inline , 反而 coder 写的 inline "可能" 无视 (自己做的比较好 ?)

Links booklink

Contact Us: admin [ a t ] ucptt.com