声明一个变量会出错,让我觉得我还缺少其他东西

Declaring a variable gives an error, makes me think there's something else I'm missing

我在 C 中有一个函数可以正常编译,直到我将另一个 case 添加到我的 switch 语句并声明一个变量。

函数如下

void evaluate(int num_inputs) {
struct gate *ptr = gatehead;
while (ptr->next != NULL) {
    switch (ptr->kind) {
        case 0:
            if (get_input_value(ptr->params[0]) && get_input_value(ptr->params[1])) {
                write_to_output(true, ptr->output);
            } else {
                write_to_output(false, ptr->output);
            }
            break;
        case 1:
            if (get_input_value(ptr->params[0]) || get_input_value(ptr->params[1])) {
                write_to_output(true, ptr->output);
            } else {
                write_to_output(false, ptr->output);
            }
            break;
        case 2:
            if (!(get_input_value(ptr->params[0]) && get_input_value(ptr->params[1]))) {
                write_to_output(true, ptr->output);
            } else {
                write_to_output(false, ptr->output);
            }
            break;
        case 3:
            if (!(get_input_value(ptr->params[0])) && !(get_input_value(ptr->params[1]))) {
                write_to_output(true, ptr->output);
            } else {
                write_to_output(false, ptr->output);
            }
            break;
        case 4:
            if ((get_input_value(ptr->params[0]) || get_input_value(ptr->params[1])) && !(get_input_value(ptr->params[0]) && get_input_value(ptr->params[1]))) {
                write_to_output(true, ptr->output);
            } else {
                write_to_output(false, ptr->output);
            }
            break;
        case 5:
            if (get_input_value(ptr->params[0])) {
                write_to_output(false, ptr->output);
            } else {
                write_to_output(true, ptr->output);
            }
            break;
        case 6:
            if (get_input_value(ptr->params[0])) {
                write_to_output(true, ptr->output);
            } else {
                write_to_output(false, ptr->output);
            }
            break;
        case 7:
            char* d = "DECODER";
            printf("%s", d);
            break;
    }
    ptr = ptr->next;
}

}

如果我注释掉案例 7,一切正常。即使保留 print 和 break 编译,但声明 char* 会导致错误“expected expression”

问题是 case 7: 标签后面紧跟着一个变量声明。

    case 7:
        char* d = "DECODER";

标签只能应用于语句,声明不被视为语句。您可以通过在 case 标签之前添加一个空语句来解决这个问题:

    case 7:
        ;
        char* d = "DECODER";