
CG_INliNE CGPointCGPointMake(CGfloat x,CGfloat y){ CGPoint p; p.x = x; p.y = y; return p;}CG_INliNE CGSizeCGSizeMake(CGfloat wIDth,CGfloat height){ CGSize size; size.wIDth = wIDth; size.height = height; return size;}解决方法 内联函数被编译到调用站点中,而不是编译为使用函数时发出的单个功能代码和调用指令。小心,这提供了更多的速度和更多的缓存命中。然而,C和C中的内联历史是岩石的,所以这个宏有效地提供了编译器独立的静态内联行为。看定义: #if !defined(CG_INliNE)# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L# define CG_INliNE static inline# elif defined(__MWERKS__) || defined(__cplusplus)# define CG_INliNE static inline# elif defined(__GNUC__)# define CG_INliNE static __inline__# else# define CG_INliNE static # endif#endif /* !defined(CG_INliNE) */
所以…
>对于提供适当版本的__STDC_VERSION__的编译器(在这种情况下为> = C99),这意味着静态内联(因为C99允许本机)
>类似于Metrowerks Codewarrior或C编译器,它们本机支持。
>对于不支持C99的GCC,它解析为静态__inline__。使用__inline__是GCC特定的在线说明符,用于以前的C标准,其中不支持inline:http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Alternate-Keywords.html。
>如果所有这些都失败,它不会内联 – 它只是静态的。
为什么要考虑所有这些定义?因为苹果在他们的历史上已经通过一个很少的编译器。在您的日子里,Codewarrior C编译器是用户选择的工具。自OS X以来,苹果已经通过(原来的修改器)GCC使用Objective C和C。最近,他们正在过渡到cl。。这个宏涵盖了所有的情况(并且考虑到新的核心图形是什么,我怀疑是旧的宏的修改版本)。
然而,这些天,许多编译器将忽略内联注释,因为它们的优化器优于程序员提供的提示。在你自己的代码中,不用烦恼(原生的形式,或通过这个宏),除非你真的确定你需要它(并通过分析证明它很有用)。当然,您可能仍然希望静态 – 上述建议涵盖内联行为。
总结以上是内存溢出为你收集整理的objective-c – CG_INLINE做什么?全部内容,希望文章能够帮你解决objective-c – CG_INLINE做什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)