比方说,我们有这样的代码:gcc可以通过一个常量函数指针数组内联一个间接函数吗?
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
声明,并对每种情况进行内联调用,但我更喜欢前者的紧凑性。
从你的代码判断,看起来你真的*非常渴望得到这个工作,不是吗? :) – Mehrdad
那么,一个不断折叠*应该*允许内联。但是由于它只适用于常量,为什么不直接调用呢? – delnan
@delnan:真正的代码使用变量索引,我只是试图最小化显示的代码。 –