gpt4 book ai didi

gcc 可以通过函数指针常量数组内联间接函数调用吗?

转载 作者:行者123 更新时间:2023-12-04 06:33:38 27 4
gpt4 key购买 nike

假设我们有这段代码:

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 语句,每个 case 都有内联调用,但我更喜欢前者的紧凑性。

最佳答案

如果在数据段中分配一些空间对你没有伤害,你可以这样尝试:

static int func_2 (int a, int b) {
return time() + a * b;
}

static int (* const ftab[])(int,int) = {func_1, func_2, func_3};

int foo (void) {
return ftab[1](6,7);
}

我的 gcc 4.4.5 正确地内联了带有 -O2 的函数。

函数代码中的聚合初始化器没有像我们预期的那样转发常量,我不知道这是 gcc 错误还是我们对某些 C 规则的误解。

关于gcc 可以通过函数指针常量数组内联间接函数调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5097917/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com