我有两个变量
int a, b ;
a
和b
可以包含0
- 3
中的任何值,并且根据a和b的值,每个条件应该有几个句子。
我使用嵌套开关:
switch(a)
{
case go:
{
switch(b)
{
case go: {...}
...
case write: {...}
}
}
...
case 3:
{
...
}
}
我也有
enum
{
go = 0 ;
wait =1 ;
read = 2;
write =3 ;
}
我有一个非常大的嵌套开关来检查所有4 * 4 = 16条件
我想使用问号? :
运算符
(a=b==0) ? Do something ? Do something.
但是我在每种情况下都要做多个陈述。
如何使用此功能? :三元运算符?
提前致谢
答案 0 :(得分:5)
您可能需要考虑将4 x 4开关块扁平化为单个16路开关:
#define SELECT(a, b) ((a) * 4 + (b))
int select = SELECT(a, b);
assert(a >= 0 && a < 4); // sanity checking - make sure a and b are valid
assert(b >= 0 && b < 4);
switch (select)
{
case SELECT(0, 0):
// ...
break;
case SELECT(0, 1):
// ...
break;
case SELECT(0, 2):
// ...
break;
case SELECT(0, 3):
// ...
break;
case SELECT(1, 0):
// ...
break;
// ...
case SELECT(3, 3):
// ...
break;
}
请注意,这在C和C ++中都可以正常工作。无论a
和b
是int
还是enum
,它都有效(请注意,您可以在SELECT宏中使用实际的枚举标签 - 您不需要使用文字常量。)