Xcode 4.6.3"预期表达"

use*_*lpa 2 c

我坚持使用我正在用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;
Run Code Online (Sandbox Code Playgroud)

之后Xcode抱怨说,只要使用c,就不会定义变量c.

我在Xcode中试过"show invisibles"无济于事.使用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;
Run Code Online (Sandbox Code Playgroud)

所以没什么好玩的.

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

Jac*_*ack 10

您需要将该案例括在大括号中.在C中,如果存在变量初始化,则需要将开关盒括在大括号中.它应该如下:

case 'L': {
  // ... your code.
  break;
}
Run Code Online (Sandbox Code Playgroud)

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

请参阅此处以获得较低级别的说明.