在C文件中单独使用单个内联函数是否相关?

时间:2017-07-08 09:49:07

标签: c inline c99

我看到这个例子,我有一个<ion-col col-6 *ngFor="let item of items"> 文件,其中包含:

crc32.c

在头文件中,我找到:

inline int32_t crc32_compute(int32_t *buffer, size_t size) {
   ...
}

对我而言,extern inline int32_t crc32_compute(int32_t *buffer, size_t size); 关键字无效,因为该函数应在头文件上声明,而不是在C文件上。这是正确的吗?

2 个答案:

答案 0 :(得分:6)

你是对的,无论是谁编写这段代码都是错误的。头文件应包含inline函数及其完整定义,而.c文件应包含extern inline声明,不带定义:

部首:

inline int32_t crc32_compute(int32_t *buffer, size_t size) {
   ...
}

C档案:

extern inline int32_t crc32_compute(int32_t *buffer, size_t size);

标题将允许内联函数代码; .c文件将指示编译器为其发出外部可见的符号。

答案 1 :(得分:1)

他们忘记了一个神奇的词。现在,如果由gcc编译,它将被忽略,编译器将决定是否以及如何实现此功能。无论如何,即使没有内联关键字,编译器(以及连接器,如果链接时间优化打开)决定如何实现函数调用 - 通过内联或传统调用。

如果要确保函数是否内联 - 您应该使用正确的编译器属性或编译指示。

放置位置以及如何声明内联函数取决于编译器,优化,链接时间优化和其他因素。

回答你的问题,如果该函数只能在特定.c文件的范围内显示 - 是的 - 但是如果没有static关键字,它也将被放置在目标文件中。