【发布时间】:2015-05-09 18:15:57
【问题描述】:
我不明白为什么这是不可能的:
inline void f(void) {}
int main(void)
{
f();
}
extern inline的回答:
C99(或 GNU99):
"inline": 像 GNU "extern inline";没有外部可见的功能 发出,但可能会调用一个,因此必须存在
问题 1:
我的理解是 f() 不是外部可见的,对我来说外部可见意味着我不能从另一个文件调用 f(),但是这里我直接在 main 中调用它。有什么问题?
解决方案
将定义放到.h文件中。
inline void f(void) {}
只有一个 .c 文件中的声明
extern inline void f(void);
问题 2:
但我也可以这样做:
这个声明放在头文件中
extern inline void f(void);
而且这个定义只存在于一个 .c 文件中
extern void f(void) {}
现在我可以使用我想要的功能了,唯一的条件是不写
extern void f(void) {}
在任何其他 .c 文件中。
如果我不使用“正常”解决方案并像我刚刚写的那样做会有什么风险?
用
编译gcc -std=c11
【问题讨论】:
-
您是否有不想使用
static的原因? -
对#1 的回答:是的,您就是这样做的。对#2 的回答:不,不要那样做。
extern inline void f(void);在头文件中没有意义。 -
@DietrichEpp 我试图理解为什么它没有意义,那有什么问题?它与正确的解决方案有何不同,您能解释一下吗?谢谢
-
@Oleg,你看到我的回答了吗?