Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
假设我的头文件中有两个内联函数:
inline int foo() { return bar()+2; } inline int bar() { return 3; }
我可以假设即使稍后声明了“bar”,C99 编译器也会内联“foo”?假设没有其他内部规则(如函数体变大)被触发。
即使 C99 将其作为选项,c 编译器的实现是否也在执行此操作(流行的是 Intel-C/Sun Studio/MSVC 和 gcc)?
inline只是对编译器的提示,在现代优化编译器中通常会被忽略。你不能假设某些东西是否被内联。如果可能的话,一些编译器会提供强制内联特定函数的编译指示(例如 MSVC __forceinline)。如果您绝对需要知道,则必须查看输出的反汇编。
inline
__forceinline
也就是说,对于给定的片段,任何体面的优化编译器都会内联它,不管有inline没有,只要它是一个单独的头文件。
只要函数的原型正确,你声明它们的顺序就无关紧要。