内联函数调用静态内联函数

时间:2016-11-25 05:40:49

标签: c

我不确定以下是C标准中的错误,GCC中的错误,还是我误解的一些奇怪的行为,但以下抱怨foo的隐含声明:

static inline void foo(void);

inline void bar(void) {
    foo();
}

有什么想法?感谢。

注意:如果您想要正确的答案,请搜索我的而不是其他的,无论投票如何。

2 个答案:

答案 0 :(得分:1)

你宣布foo,但从未定义它。我得到的错误是inline function ‘void foo()’ used but never defined,它正好告诉你。

答案 1 :(得分:1)

没关系,我找到了正确的答案。

尽管代码对于单个翻译单元案例具有逻辑意义,但标准似乎明确禁止这一极端情况(无论如何这都是不好的做法,因为如果 foo ,重构可能会导致问题并且 bar 被移动到单独的TU ---因为 foo 不会是 bar 的TU范围。)

C11的§6.7.4p3说:

  

具有外部链接的函数的内联定义不应包含具有静态或线程存储持续时间的可修改对象的定义,并且不应包含对具有内部链接的标识符的引用。