gpt4 book ai didi

c - 避免重复/循环取消切换

转载 作者:太空狗 更新时间:2023-10-29 17:10:30 28 4
gpt4 key购买 nike

我有一个紧密循环运行的热点代码:

for (i = 0; i < big; i++)
{
if (condition1) {
do1();
} else if (condition2) {
do2();
} else {
do3();
}
// Shared code goes here
// More shared code goes here
}

由于 condition1condition2 是不变的,我取消了循环以

if (condition1) {
for (i = 0; i < big; i++)
{
do1();
// Shared code goes here
// More shared code goes here
}
} else if (condition 2) {
for (i = 0; i < big; i++)
{
do2();
// Shared code goes here
// More shared code goes here
}
} else {
for (i = 0; i < big; i++)
{
do3();
// Shared code goes here
// More shared code goes here
}
}

这样运行起来好多了,但我想知道是否有一种聪明的方法可以做到这一点而不重复自己?

最佳答案

另一个可能稍微更有效的选择是使用宏为您构建代码:

#define DO_N(name, ...) for(int i = 0; i < big; i++){name(__VA_ARGS__);/*shared code*/}

if (condition1) {
DO_N(do1, .../*arguments here*/)
} else if (condition 2) {
DO_N(do2, ...)
} else {
DO_N(do3, ...)
}

#undef DO_N

它很丑,但我认为它可以满足您的需求,并且可能允许在函数指针不允许的地方进行内联。

此外,您可能会发现将共享代码放在单独的宏或函数中更具可读性。

关于c - 避免重复/循环取消切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35161175/

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