为什么我不能内联这个功能?

时间:2012-04-14 17:04:07

标签: objective-c c function inline

如果我将此函数内联并使用objective-c方法调用它,它会给我一个clang: error: linker command failed with exit code 1 (use -v to see invocation)

Vector addv(Vector v1, Vector v2) {// works
    return (Vector){v1.x + v2.x, v1.y + v2.y, v1.z + v2.z};
}

inline Vector addv(Vector v1, Vector v2) {// if I call this, does not build
    return (Vector){v1.x + v2.x, v1.y + v2.y, v1.z + v2.z};
}

为什么要这样做,我该怎么做才能解决它?

1 个答案:

答案 0 :(得分:3)

C99 inline不保证发出链接器符号。你必须在一个编译单元(即.c)中放置一个“实例化”。

所以.h文件中的inline定义:

inline Vector addv(Vector v1, Vector v2) {// if I call this, does not build
    return (Vector){v1.x + v2.x, v1.y + v2.y, v1.z + v2.z};
}

Vector addv(Vector v1, Vector v2);

在一个.c文件中生成符号。