2

我被当前正在用 Xcode 编写的 C 程序所困扰。经过几个小时的工作后,Xcode 突然开始抱怨“预期的表达”消息:

  switch(cmd) {

    case 'S':
      state = sstart;
      accpos = accmax = varnum = 0;
      inquote = inddstar = false;
      break;

    case 'L':
      char c;   // *** expected expression
      int i = 0;
      bool processed;

      while( (c = buff[i++]) != '\0') {
        acc[accmax++] = c;

之后 Xcode 抱怨变量 c 在使用 c 时没有定义。

我在 Xcode 中尝试过“显示不可见”,但无济于事。使用 clang 或 gcc 手动编译程序会给出相同的错误消息。

在预处理器步骤之后,这部分代码如下所示(使用clang -E获得):

  switch(cmd) {

    case 'S':
      state = sstart;
      accpos = accmax = varnum = 0;
      inquote = inddstar = 0;
      break;

    case 'L':
      char c;
      int i = 0;
      _Bool processed;

      while( (c = buff[i++]) != '\0') {
        acc[accmax++] = c;

所以也没什么有趣的。

有任何想法吗?我在 23 年前编写了我的最后一个 C 程序,所以我可能错过了一些东西......

4

1 回答 1

10

您需要将该案例括在大括号中。在 C 语言中,如果存在变量初始化,则需要将 switch-case 括在大括号中。它应该如下:

case 'L': {
  // ... your code.
  break;
}

尽管您的编译器可能允许您在 swith-case 中声明变量,但这样做并不是一个好主意。您可能可以用辅助函数替换该案例。

有关较低级别的说明,请参阅此内容。

于 2013-08-13T20:27:29.440 回答