このコードがあるとしましょう:
inline int func_2 (int a, int b) {
return time() + a * b;
}
int main (void) {
int x = (int (*[])(int, int)){func_1, func_2, func_3}[1](6, 7);
}
への間接呼び出しを実際にインライン化するために gcc を何らかの方法で騙すことはできますfunc_*
か?
-O2
とを使用してコードをコンパイルした後でも、アセンブリ出力で命令を-O3
見つけることができました。call func_2
switch
この毛むくじゃらの式は、ケースごとにインライン呼び出しを行うかさばるステートメントに変換できることは知っていますが、コンパクトさから前者の方が好みです。