如何避免使用多个“if then”来检查参数?

时间:2013-06-05 08:48:36

标签: c if-statement switch-statement performance

我有一些代码可以做一件简单的事情:

如果参数的值为-1,那么我应该更改该值。 别的 - 什么都不做

我有一个包含20个参数的列表,但是我想知道是否有任何方法可以不进行检查:

如果param1 == -1那么......其他......

如果param2 == -1则....还是......

任何人都知道如何才能提高效率? 谢谢!

4 个答案:

答案 0 :(得分:4)

如果参数是所有变量(它不在数组或其他东西中),你可以创建一个函数并写入

change_or_let_it_be( &param1, value );
change_or_let_it_be( &param2, value );
change_or_let_it_be( &param3, value );

并且你只有一个if(在函数中)和很多调用。 更好的方法是将它存储在某个结构(数组,列表等)中,并避免调用此函数20次。

答案 1 :(得分:3)

不确定我是否理解你想要的东西,但是这个怎么样?

void func(int params[20]) {
    for (int i = 0; i < 20; ++i) {
        if (params[i] == -1)
            params[i] = NEW_VALUE;
    }
}

使用for检查每个值,因此您不需要对所有不同的值进行硬编码,然后在-1为-1时更改参数。另请注意,我假设“高效”,这意味着更多的代码写入时间在这里!

答案 2 :(得分:0)

老实说,即使不是最漂亮的解决方案,if / then语句系列也是最有效的!将测试嵌入循环并将参数存储为数组需要进行以下额外计算:

- testing that the loop counter does not exceed the maximum
- incrementing the loop counter
- using pointer arithmetic to access each parameter

当然,如果您必须多次执行这20次测试,这些速度考虑因素只是一个因素。但实际上你已经尽可能高效地写了它:)

答案 3 :(得分:0)

另一个更清洁的解决方案:

int *p[] = {&param1, &param2, &param3, NULL};
int i = 0;
for(;p[i] != NULL; i++) {
    if(*p[i] == -1) *p[i] = SOME_VALUE;
}