嵌套的switch语句

时间:2017-09-18 06:59:46

标签: c switch-statement

我对下面的代码有疑问,我处理了不相关的代码。

我调试了代码,发现问题是我无法进入切换(e-> u.op.oper)

在函数interpExp()中,存在嵌套的switch语句。在那里,我可以看到字符串的输出,“好”。所以执行显然就到了那里。

但是,我看不到“哇”输出 由于打印了“good”,我认为也应该打印“哇”。 但我看不到紧随其后的“哇”输出,这应该会发生  来自第二个嵌套语句开关(e-> u.op.oper)

typedef struct A_exp_* A_exp;
typedef enum {A_plus, A_minus, A_times, A_div} A_binop;

struct IntAndTable interpExp(A_exp e, Table_ t) {
    Table_ tempT;
    switch (e->kind) {
        case A_idExp :
            return (struct IntAndTable) {lookup(t, e->u.id), t}; 
        case A_numExp :
            printf("hi\n");
            printf("%d\n", e->u.num);
            return (struct IntAndTable) {e->u.num, t}; 
        case A_opExp :
            printf("good\n");
            switch (e->u.op.oper) {
                printf("wowowowowow\n");
                struct IntAndTable left = interpExp(e->u.op.left, t); 
                struct IntAndTable right = interpExp(e->u.op.right, left.t);
                case A_plus :
                    return (struct IntAndTable) {left.i + right.i, right.t};
                case A_minus :
                    return (struct IntAndTable) {left.i - right.i, right.t};
                case A_times :
                    return (struct IntAndTable) {left.i * right.i, right.t};
                case A_div :
                    return (struct IntAndTable) {left.i / right.i, right.t};
            }
        case A_eseqExp :
            tempT = interpStm(e->u.eseq.stm, t); 
            return interpExp(e->u.eseq.exp, tempT);
    }   
}


struct A_exp_ {
    enum {A_idExp, A_numExp, A_opExp, A_eseqExp} kind;
    union {
        string id; 
        int num;
        struct {
            A_exp left;
            A_binop oper;
            A_exp right;
        } op; 
        struct {
            A_stm stm;
            A_exp exp;
        } eseq;
    } u;
};

1 个答案:

答案 0 :(得分:2)

您的内心switch在所需的case之前没有printf, 这导致break之前的代码永远不会被执行。

在他的评论中向Antti Haaapala致信C-standard的有用链接 在exmple(或其解释)中,明确指出无法访问像你这样的代码"。