假设我的头文件中有两个内联函数:
inline int foo() { return bar()+2; }
inline int bar() { return 3; }
我可以假设即使后来声明'bar',C99编译器也会内联“foo”吗? 假设没有触发其他内部规则,如函数体到大。
c编译器的实现是否正在执行此操作(流行的那些是Intel-C / Sun Studio / MSVC和gcc),即使C99将此作为选项?
答案 0 :(得分:3)
inline
只是对编译器的一个暗示,在现代优化编译器中,它经常被忽略。您无法假设某些内容是否被内联。一些编译器提供了编译指示,如果可能的话(例如MSVC __forceinline
)强制特定函数被内联。如果您完全需要知道,则必须查看输出的反汇编。
也就是说,对于给定的片段,任何体面的优化编译器都会使用inline
或不使用{{1}}来内联,只要它是单个标题。
答案 1 :(得分:3)
只要这些函数是正确的原型,你声明它们的顺序就不重要了。