1

所以,我有这个功能,但我遇到了一些我无法弄清楚的非常奇怪的错误。

void serialize_helper(huff *h, bits *history, char** a)
{
  switch (h->tag) {
  case LEAF:
    char letter = h->h.leaf.c;
    int arraynum = (int)letter;
    a[arraynum] = bits_show(history);
    putchar('\n');
    return;
  case NODE:
    /* traverse left subtree */
    bits_putlast('0',history);
    serialize_helper(h->h.node.lsub,history, a);
    bits_remove_last(history);
    /* traverse right subtree */
    bits_putlast('1',history);
    serialize_helper(h->h.node.rsub,history, a);
    bits_remove_last(history);
    return;
  default:
    fprintf(stderr,"main.serialize_helper: bad tag\n");
    exit(1);
  }
}

对于一个简单的变量定义(来自 char letter = ...;),我收到此错误:

“huffenc.c:18: 错误: 'char' 之前的预期表达式”

此外,编译器的行为就像我对“字母”的声明不存在:“huffenc.c:19: error: 'letter' undeclared (first use in this function)”

4

1 回答 1

2

如果你想在 aswitch之后直接定义一个变量,case你需要一个块,例如

  case LEAF: {
    char letter = h->h.leaf.c;
    int arraynum = (int)letter;
    a[arraynum] = bits_show(history);
    putchar('\n');
    return;
  }

编辑:原因很简单,标签后面只能跟一个语句,而声明或初始化不是语句,而块(即复合语句)是。

于 2013-03-13T21:22:44.437 回答