gpt4 book ai didi

c - 标签作为值与 switch 语句

转载 作者:太空狗 更新时间:2023-10-29 15:14:18 24 4
gpt4 key购买 nike

我最近读到有关标签作为值的内容,

int main(){
int value = 2;
const void *labels[] = {&&val_0, &&val_1, &&val_2};
goto *labels[value];
val_0:
printf("The value is 0\n");
goto end;
val_1:
printf("The value is 1\n");
goto end;
val_2:
printf("The value is 2\n");
goto end;
end:
return(0);
}

我想问的是,使用这种方法而不是使用 switch 语句或指针数组真的能提高性能吗?

最佳答案

这是一个非标准扩展,在这种情况下可能不会比等效的 switch 语句执行得更好,恕我直言,应该避免。 switch 语句更清晰,更易于维护。

(我快速测试了我的 gcc 版本,它为这段代码和等效的 switch 语句生成了完全相同的代码。不过,这不是一个具有代表性的测试,因为它优化了除实际选择的代码路径之外的所有内容.)

一个潜在的性能考虑因素是 switch 语句必须具有合理的行为,即使 value 不在正确的范围内,您的版本具有未定义的行为,因此编译器可以避免范围检查在一些代码中。

关于c - 标签作为值与 switch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8019849/

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