#include <stdlib.h>
inline int f0(int a) {
return a*a;
}
inline int f1(int a) {
return a*a*a;
}
int main() {
int (*f)(int);
f = rand()%2 ? f0 : f1;
return f(rand());
}
gccでは、生成されたasmファイルはインラインでもインラインでも同じです。関数ポインタを持つコードと同じですか?関数ポインタで使用される関数をインライン化できますか?
gccを含むほとんどのコンパイラは、インラインであるかどうかを判断する際に、実際には 'inline'を気にしません。それは間違いなく無視することができ、インラインの存在がそれを決定するヒューリスティックに多くの影響を与えた場合、私は驚くだろう。 – delnan