用宏还是用inline?

赵文波 2010-11-03 12:03:08
都说在C++中,用inline比使用宏更安全。但是我看过的一些开源项目中,似乎更多的还是在使用宏。
例如下面这两段代码,实现的功能是完全一至的。四舍五入一个浮点数。(来自CEGUI)
那么如果这两个函数都是需要大量调用的。那么写成哪一种形式更好呢?CEGUI里用的是宏。
另:在实际的项目开发中,宏和inline各自的优缺点各是什么?

//////////////////////////////////////////////////
#define CEGUI_ALIGN_ELEMENTS_TO_PIXELS
#if defined(CEGUI_ALIGN_ELEMENTS_TO_PIXELS)
#define PixelAligned(x) ( (float)(int)(( x ) + (( x ) > 0.0f ? 0.5f : -0.5f)) )
#else
#define PixelAligned(x) ( x )
#end

//////////////////////////////////////////////////
#define CEGUI_ALIGN_ELEMENTS_TO_PIXELS
#if defined(CEGUI_ALIGN_ELEMENTS_TO_PIXELS)
template <class T> inline T PixelAligned(T t)
{ return (T)(int)(( t ) + (( t ) > 0.0f ? 0.5f : -0.5f)); }
#else
template <class T> inline T PixelAligned(T t)
{ return t; }
#endif
...全文
289 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
iambic 2010-11-04
  • 打赏
  • 举报
回复
反正已经用了一堆宏,也不妨多用这么一点。那个模板函数看起来有点蛋疼(没仔细看有没有问题),宏的话使用起来还要留意多次估值问题。还是lisp里的宏好。
ForestDB 2010-11-04
  • 打赏
  • 举报
回复
一个偏C,一个偏C++。
浅行 2010-11-04
  • 打赏
  • 举报
回复
inline
理由见effective c++
libinfei8848 2010-11-04
  • 打赏
  • 举报
回复
inline会有一些合法检查,更容易调试和查找bug
有些简单的地方define还是不能舍弃的
wyfwx 2010-11-03
  • 打赏
  • 举报
回复
c++中最好不用宏,宏无法做语法检查,很多莫名的运行错误都是对宏的编写不够完善导致的
job82824 2010-11-03
  • 打赏
  • 举报
回复
各有各的用途。宏可用于全局的;inline可用于类成员的。
银点 2010-11-03
  • 打赏
  • 举报
回复
宏是要慢慢退出历史舞台的
adventurelw 2010-11-03
  • 打赏
  • 举报
回复
一些复杂的表达式肯定用inline啊,#define括号都能把人花死。。。。。。
常量肯定是尽量用const
#define有时候很方便,比如作为字符串替换的时候。
luciferisnotsatan 2010-11-03
  • 打赏
  • 举报
回复
inline只是一个建议,预编译时不一定会把函数调用替换为函数代码。不过函数调用在性能上的很小。
luciferisnotsatan 2010-11-03
  • 打赏
  • 举报
回复
用inline
shexinwei 2010-11-03
  • 打赏
  • 举报
回复
用inline。

不要用宏,要用const定义变量,用inline定义函数。

推荐阅读:
effective c++
more effective c++
Rico_Liu 2010-11-03
  • 打赏
  • 举报
回复
宏有个很不好的地方,就是报错信息会让你很困惑。
反正大家都说inline好
virgil0236 2010-11-03
  • 打赏
  • 举报
回复
当然是inline了
aeolus_boy 2010-11-03
  • 打赏
  • 举报
回复
用inine好,宏这个东西没有语法检测,而且宏不是专门用来作这个的。一个内联方法代码不过的话,推荐用内联
lams3316 2010-11-03
  • 打赏
  • 举报
回复
inline可以省去调用函数的时间花费,但是一些轻量级的东西用宏还是可以的。
Daveee 2010-11-03
  • 打赏
  • 举报
回复
inline最好是调用频率很高的一些函数,因为这些函数频繁调用会大量消耗栈内存,声明为inline后相当于替换函数。define是纯代码替换
hanwei1838 2010-11-03
  • 打赏
  • 举报
回复
接分,用inline。
N多C++是从C的基础上学习的C++。保持了N多C风格。
wokonglinglude 2010-11-03
  • 打赏
  • 举报
回复
inline 的优点比宏多的不是一点半点,不再重述了。 参数检查 效率提升 安全可靠!
宏是C的产物,标c++ 早就不提倡用了,const 和inline 完全代替
Aniao 2010-11-03
  • 打赏
  • 举报
回复
现在的编译器好像对宏也有名称了
maomao0117 2010-11-03
  • 打赏
  • 举报
回复
我觉得全局的还是用宏比较好
加载更多回复(4)

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧