Допустим, у нас есть этот код:
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
со встроенными вызовами для каждого случая, но я предпочитаюбывший за его компактность.