【问题标题】:Why can't I make this function inline?为什么我不能使这个函数内联?
【发布时间】:2012-04-14 17:04:07
【问题描述】:

如果我将此函数内联并从 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};
}

为什么会这样,我能做些什么来解决它?

【问题讨论】:

  • 也许你需要声明它static inline 或者放在一个头文件中。
  • @BasileStarynkevitch:它已经在头文件中。将其设为静态会做什么?
  • 如果不是static,该函数的代码仍会在每个目标文件中发出,因此该函数对链接器来说是多重定义的。

标签: objective-c c function inline


【解决方案1】:

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 文件中生成符号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-23
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2012-12-16
    • 1970-01-01
    相关资源
    最近更新 更多