有没有办法将几个不同的条件与共享语句结合起来?

Is there a way to combine several different conditionals with a shared statement?

有没有办法将几个不同的条件与共享语句结合起来?

例如:

int a;
...
if (a == 1){
    foo;
    ...
    return K1;
}
else if (a == 2){
    foo;
    ...
    return K2;
}
...
else if (a == i){
    foo;
    ...
    return Ki;
}

有没有一种聪明的方法可以去掉 foo 但只在这些条件下发生? (就像代数中的因式分解:2x+6=2(x+3))。

感觉有点重复,所以我想应该有办法让它更短。

在您的场景中可以这样吗?

int a;
int k; // let's assume int
...
k = a == 1? K1:
    a == 2? K2:
    ...
    a == i? Ki:
    K0; // a special value
if (k != K0)
    foo;
return k;

假设 return 值是 int 类型(相应地更改它)。您可以使用以下内容:

int a;
int retVal;
int execFoo;

execFoo = 0;
...
if (a == 1){
    execFoo = 1;
    ...
    retVal = K1;
}
else if (a == 2){
    execFoo = 1;
    ...
    retVal = K2;
}
...
else if (a == i){
    execFoo = 1;
    ...
    retVal = Ki;
}

if(execFoo == 1)
    foo;
return retVal;

扩展 WeatherVane 关于数组的评论 - 值 可以 始终存储在数组中,即使它们没有以这种方式到达有问题的块 - 只需将它们在一个新的:

T array[] = { [1] = K1, K2, K3, ..., Ki };
foo();
return a <= i && a > 0 ? array[a] : K0;

我觉得用一个辅助函数得到a对应的k然后用k的值调用foo还是不行.

// Function to get K given a.
int getK(int a)
{
   switch (a)
   {
      case 1:
         return K1;

      case 2:
         return K2;

      default:
         return K_Unknown;
   }
}

函数的使用:

int a;
int k = getK(a);
if ( k != K_Unknown )
   foo;

你可以#define一个宏IF(cond) if ((cond) && (<foo>, 1))并在所有块之后#undef它:

#define IF...
IF (a == 1) { ... }
else IF (a == 2) { ... }
#undef IF

(前提是 <foo> 是单个表达式)