宏仅仅是文本串替换,而且再稍微复杂的情况下有些行为是未定义的,所以会看到很多书中是不提倡用宏的
在函数方面, 首先 宏不会进行类型检查,边界检查等,这是用macro宏的不安全性。
其次,宏替换总会被执行, 而inline是一种建议操作,而不是强制性的,会不会展开取决于编译器, 如果编译器认为展开会影响整体性能(比如inline函数里代码太多,比较复杂等),则放弃inline,而是按普通函数调用
GCC does not inline any functions when not optimizing unless you
specify the `always_inline' attribute for the function, like this:
/* Prototype. */
inline void foo (const char) __attribute__((always_inline));
阅读(1610) | 评论(0) | 转发(0) |