游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1988|回复: 5

inline 函数为什么不是 inline ...

[复制链接]

82

主题

331

帖子

340

积分

中级会员

Rank: 3Rank: 3

积分
340
QQ
发表于 2004-6-2 23:15:00 | 显示全部楼层 |阅读模式
强烈希望他成为 inline 函数,但是编译器就是不给。我的函数并不复杂.

两个函数是在同一个 CPP 文件中的。

如:
    inline UINT Set_ID(UINT ID_1, UINT ID_2, UINT ID_3)
     {
          // .... etc Not Complex ...
     }

     void Get_ID(void)
    {
         UINT ID = Set_ID(1, 2, 3); // 打开反汇编就知道编译器没有当他是 inline ... Why ?

         // etc
    }

我用的是 Vc++ 2003,对此编译器选项也不太了解。希望高手能给予指点,谢谢。

还有在两个不同的 CPP 文件中,inline 这个标识符还能起作用吗 ( 可视吗 ) ?
就是在 A.cpp 中有一个 inline void A() { ... }
在 B.cpp 中有一个 inline void B() { ... }
inline void B()
{
      A(); // inline 还能起作用吗 ?
         // 如果不能,是不是因为编译的先后问题,还是其他的原因,谢谢。
}

85

主题

824

帖子

878

积分

高级会员

Rank: 4

积分
878
QQ
发表于 2004-6-2 23:32:00 | 显示全部楼层

Re:inline 函数为什么不是 inline ...

实际上,inling在实现的时候就是对编译器的一种请求,因此编译器完全有权利取消一个函数的内联请求。一个好的编译器能根据函数的定义体,自动取消不值得的内联......
——摘自《高质量程序设计指南--C++/C》(第二版)
如此看来你那段程序似乎被Vc++ 2003认为是不值得内联的啊?!
请注意,内联函数必须短小而简单,不能在函数体内出现循环或其他复杂的控制结构!
当然,如果有谁硬要这么做,我也没办法......

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20527
发表于 2004-6-3 03:32:00 | 显示全部楼层

Re:inline 函数为什么不是 inline ...

可以关掉编译器的优化选项尝试一下。

82

主题

331

帖子

340

积分

中级会员

Rank: 3Rank: 3

积分
340
QQ
 楼主| 发表于 2004-6-3 11:02:00 | 显示全部楼层

Re:inline 函数为什么不是 inline ...

谢谢各位的帮忙,我现在在找一些编译器的选项信息,新的编译器选项还真是多。

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2004-6-3 15:04:00 | 显示全部楼层

Re:inline 函数为什么不是 inline ...

如果你是用的VC就好办了,可以用__forceinline这个keyword
另外你把/O的选项关了编译也可以。
还有办法就是你在程序开头可以用
#pragma(inline, recursion, on) 还有就是
#pragma(inline, depth, n)来设置判断是否inline的级别。

82

主题

331

帖子

340

积分

中级会员

Rank: 3Rank: 3

积分
340
QQ
 楼主| 发表于 2004-6-3 15:28:00 | 显示全部楼层

Re:inline 函数为什么不是 inline ...

多谢各位的帮忙,‘问题’基本上已经解决,以后有问题还会打扰大家的。

Thank you so much !!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-7-1 15:52

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表