【发布时间】:2013-02-21 22:45:17
【问题描述】:
我遇到了一些编译器/链接器错误,我不知道正确的方法是什么。我就是这种情况:
- a.h:在这个文件中定义了一个声明为“inline”的函数,例如:inline void foo1();
- b.h:在此文件中定义了一个声明为“内联”的函数,该函数调用 foo1():inline void foo2();
- main.c:有一些函数调用了 foo1 和 foo2()。
现在,如果我将 a.h 和 b.h 中的 foo1 和 foo2 声明为 extern inline void 我得到以下错误:
prj/src/b.o:在函数
foo1': (.text+0x0): multiple definition offoo1' prj/src/main.o:(.text+0x0): 首先在这里定义 make: * [内核] 错误 1
在我描述的情况下,允许编译和链接没有错误/警告的方式是什么?
【问题讨论】:
-
用
static inline怎么样? -
我认为这行不通。静态属性意味着该函数仅在声明/定义的翻译单元中可见,并且我想在其他模块中使用该函数...
-
不,等等。使用静态它可以工作...但是为什么呢? @75inchpianist
-
当你
#include一个文件时,它的所有内容都成为当前翻译单元的一部分。