objective-c – 为什么将C函数声明为静态内联?

我遇到一个C函数的例子,声明为:

static inline CGPoint SOCGPointAdd(const CGPoint a, const CGPoint b) {
    return CGPointMake(a.x + b.x, a.y + b.y);
}

直到现在,我在.h文件中声明了实用程序C函数,并将它们实现在.m文件中,如下所示:

CGPoint SOCGPointAdd(const CGPoint a, const CGPoint b) {
    return CGPointMake(a.x + b.x, a.y + b.y);
}

我可以在任何需要的地方使用这个函数“inline”,它也应该是“static”,因为它不与任何对象相关联,像Objective-c方法.指定“静态”和“内联”的要点或优点是什么?

最佳答案
inline并不意味着你可以使用函数“inline”(在其他函数中使用函数是正常的;你不需要inline);它鼓励编译器将该函数构建到使用它的代码中(通常以提高执行速度为目标).

静态意味着函数名称不是外部链接的.如果函数没有被声明为静态,则需要编译器使其在外部可见,以便可以与其他对象模块链接.为此,编译器必须包含单独的非内联函数实例.通过声明static函数,您允许其所有实例在当前模块中内联,可能不会有单独的实例.

静态内联通常用于在调用例程中比使用调用机制更好的小函数,因为它们非常短而快,实际上它们比调用单独的副本更好.例如.:

static inline double square(double x) { return x*x; }

转载注明原文:objective-c – 为什么将C函数声明为静态内联? - 代码日志