inline函数中定义local static变量

Tracy2007 2008-03-11 06:03:41

inline void f()
{
static int i = 0
}


这个函数被内敛展开后会是怎样的情况?
比如:
f();
f();
难道会展开成这样吗:
static int i = 0;
static int i = 0;

如果的在两个cpp中都调用了f()呢???

等待高手解决
...全文
366 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Faitle 2008-03-12
  • 打赏
  • 举报
回复
inline 只是个请求,到底实不实施由编译器根据具体情况决定
跟编译器相关

ps:四楼的例子在我的VC6和VC.NET上都可以运行啊
taodm 2008-03-12
  • 打赏
  • 举报
回复
不要在inline函数里定义static变量。不是所有编译器都能正确处理。
Tracy2007 2008-03-11
  • 打赏
  • 举报
回复

是啊
我是测试过才来这里发帖子的
zenny_chen 2008-03-11
  • 打赏
  • 举报
回复
To 楼上:

晕啊。你上面的代码怎么在我的VS2005.NET下编译运行没问题?
nicky_zs 2008-03-11
  • 打赏
  • 举报
回复
自己试一下就知道了。
我在VS2005下试的:
inline void f() { static int i = 0; }
int main() {
f();
f();
return 0;
}
结果,在运行时会报错:符号重定义。
zenny_chen 2008-03-11
  • 打赏
  • 举报
回复
从上面可以看到,在main()函数内到call _printf之前,没有出现过任何的call指令。这也意味着func()函数被内联了。
zenny_chen 2008-03-11
  • 打赏
  • 举报
回复
要知道,展开内联函数不像展开宏。宏是预编译的,所以你宏里定义的是什么,那么在你源文件中就会展开什么。
而内联函数展开是目标代码,也就是汇编,所以在这里不会出现负面效果。

它应该可以被展开。

以下是基于VisualDSP++平台,Blackfin561 DSP的运行例子:


#include <stdio.h>

// The pragma here is used to ensure func() is inlined.
// C99 support the key word "inline".
#pragma always_inline
inline int* func(void)
{
static int i = 0;

return &i;
}


int main(void)
{
int *p = func();

*p = 1;

func();

printf("The result is: %d\n", *p);

return 0;
}


hityct1 2008-03-11
  • 打赏
  • 举报
回复
我觉得编译器会忽略inline。mark
相关推荐
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-03-11 06:03
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下