【问题标题】:Declaring a variable gives an error, makes me think there's something else I'm missing声明一个变量会出错,让我觉得我还缺少其他东西
【发布时间】:2022-01-03 02:26:24
【问题描述】:

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

这是函数

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* 会导致错误“预期表达式”

【问题讨论】:

  • 与你的问题无关,但不要在这么多地方打电话给write_to_output。这可以很容易地重构,以便您只调用一次。
  • William Pursell 我会在最终构建之前这样做,谢谢

标签: c gcc clang


【解决方案1】:

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

    case 7:
        char* d = "DECODER";

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

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

【讨论】:

  • 我不知道,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
相关资源
最近更新 更多