可以在以后声明的C引用实体中内联函数体

时间:2009-11-30 05:11:31

标签: c inline c99

假设我的头文件中有两个内联函数:

inline int foo() { return bar()+2; }
inline int bar() { return 3; }

我可以假设即使后来声明'bar',C99编译器也会内联“foo”吗? 假设没有触发其他内部规则,如函数体到大。

c编译器的实现是否正在执行此操作(流行的那些是Intel-C / Sun Studio / MSVC和gcc),即使C99将此作为选项?

2 个答案:

答案 0 :(得分:3)

inline只是对编译器的一个暗示,在现代优化编译器中,它经常被忽略。您无法假设某些内容是否被内联。一些编译器提供了编译指示,如果可能的话(例如MSVC __forceinline)强制特定函数被内联。如果您完全需要知道,则必须查看输出的反汇编。

也就是说,对于给定的片段,任何体面的优化编译器都会使用inline或不使用{{1}}来内联,只要它是单个标题。

答案 1 :(得分:3)

只要这些函数是正确的原型,你声明它们的顺序就不重要了。