使用 aarch64 linux android clang 的 ARMv8 架构的内联函数交叉编译问题
Inline function cross compilation issues for ARMv8 architecture using aarch64 linux android clang
我对在 C 代码 (C99) 中使用 inline 关键字有疑问。
我知道 C99 内联语义不同于 C++ 或 gnuC 内联规则,
我已阅读
http://www.greenend.org.uk/rjk/tech/inline.html
和
extern inline
但是,我就是无法正常工作。
我在file1.c
中有一个函数定义如下
inline myfunc(arguments)
{
}
并且此函数是从 file2.c
中的另一个函数调用的
在那 file2.c 我尝试使用
extern inline myfunc(arguments);
在从其他函数调用之前针对此函数
我仍然不断收到错误 - myfunc 的隐式声明
如果我删除 extern inline
或未定义的引用错误
由于我的代码结构,不能在头文件中定义 myfunc 函数,也不能将其作为静态内联,因为它必须从不同的编译单元调用。
我错了什么?如何解决。
经过大量阅读、反复试验后,我以我一直在寻找的方式找到了上述问题的答案 - 使用 C99 规则,内联 C 源文件中存在的 C 函数定义,而不是将其放入在头文件中。
我将属性 always_inline 关键字添加到函数定义和声明中,如下所示并重新编译,它内联对该函数的调用。
在文件 file1.c
中
__attribute__((always_inline)) void myfunc(arguments)
{
//... function definition
}
在有声明的file1.h中,我将其更改为如下
__attribute__((always_inline)) void myfunc(arguments);
我对在 C 代码 (C99) 中使用 inline 关键字有疑问。 我知道 C99 内联语义不同于 C++ 或 gnuC 内联规则, 我已阅读
http://www.greenend.org.uk/rjk/tech/inline.html
和
extern inline
但是,我就是无法正常工作。
我在file1.c
中有一个函数定义如下inline myfunc(arguments)
{
}
并且此函数是从 file2.c
中的另一个函数调用的
在那 file2.c 我尝试使用
extern inline myfunc(arguments);
在从其他函数调用之前针对此函数
我仍然不断收到错误 - myfunc 的隐式声明
如果我删除 extern inline
或未定义的引用错误由于我的代码结构,不能在头文件中定义 myfunc 函数,也不能将其作为静态内联,因为它必须从不同的编译单元调用。
我错了什么?如何解决。
经过大量阅读、反复试验后,我以我一直在寻找的方式找到了上述问题的答案 - 使用 C99 规则,内联 C 源文件中存在的 C 函数定义,而不是将其放入在头文件中。 我将属性 always_inline 关键字添加到函数定义和声明中,如下所示并重新编译,它内联对该函数的调用。 在文件 file1.c
中__attribute__((always_inline)) void myfunc(arguments)
{
//... function definition
}
在有声明的file1.h中,我将其更改为如下
__attribute__((always_inline)) void myfunc(arguments);