0

我收到以下错误,希望有人可以为我解释这些错误,因为我目前在 C 方面不是很好。

case ' ':     
This is the error here. shellNew.c:57: error: a label can only be part of a statement and                 a declaration is not a statement

int rCheck = 0;
shellNew.c:58: error: expected expression before â

int foundPos = 0;
while(rCheck < 10)
{
  if(inputBuffer[2] == historyBuffer[rCheck][0])
  {
shellNew.c:63: error: â undeclared (first use in this function)
shellNew.c:63: error: (Each undeclared identifier is reported only once
shellNew.c:63: error: for each function it appears in.)

  foundPos = rCheck;
  }
rCheck++;
}
if(rCheck == 0)
{
  printf("There was no command matching your criteria\n");
}
else
{
  strcpy(inputBuffer, historyBuffer[rCheck]);
}
break;
4

1 回答 1

1

假设switch在前面的 56 行代码中有一个,那么编译器就会抱怨你不能这样做:

switch (variable)
{
case ' ':
    int var = 23;

因为声明不算作声明,并且必须将标签附加到声明中。转换为一个小函数,这段代码给了我你在 Mac OS X 10.7.5 上使用 GCC 4.7.1 报告的错误。随后的错误可能是因为您的变量rCheck因标签放错而未声明,导致您尝试使用它时出现问题。

您不能跳过变量声明,因此您需要在语句块内使用switch语句块:

switch (variable)
{
case ' ':
    {
    int var = 23;
    ...
    }
    break;
}

这段代码编译得很干净。break将语句块放在内部还是外部更好,这是一个有争议的问题;他们是等价的。

于 2012-10-19T02:55:42.927 回答