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

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

我可以假设C99编译器将内联<!>“foo <!>”;即使后来宣布'bar'? 假设没有触发其他内部规则,如函数体到大。

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

有帮助吗?

解决方案

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

其他提示

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

也就是说,对于给定的片段,任何体面的优化编译器都会用<=>或不用,只要它是单个标题就可以内联。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top