有没有办法将几个不同的条件与共享语句结合起来?
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>
是单个表达式)
有没有办法将几个不同的条件与共享语句结合起来?
例如:
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>
是单个表达式)