问号运算符的多个语句

Multiple Statements for question mark operator

本文关键字:语句 运算符      更新时间:2023-10-16

我有两个变量

int a, b ;

ab 可以具有 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.

但是,在每个条件下我有多个语句要做。

我如何使用这个? : 三元运算符?

提前致谢

您可能需要考虑将 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++ 中都可以正常工作。无论abint s 还是 enum s,它都可以工作(请注意,您可以在 SELECT 宏中使用实际的枚举标签 - 您不需要使用文字常量)。