2

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

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

我可以假设即使稍后声明了“bar”,C99 编译器也会内联“foo”?假设没有其他内部规则(如函数体变大)被触发。

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

4

2 回答 2

3

inline只是对编译器的提示,在现代优化编译器中通常会被忽略。你不能假设某些东西是否被内联。如果可能的话,一些编译器会提供强制内联特定函数的编译指示(例如 MSVC __forceinline)。如果您绝对需要知道,则必须查看输出的反汇编。

也就是说,对于给定的片段,任何体面的优化编译器都会内联它,不管有inline没有,只要它是一个单独的头文件。

于 2009-11-30T05:17:27.727 回答
3

只要函数的原型正确,你声明它们的顺序就无关紧要。

于 2009-11-30T05:18:52.340 回答