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

前の 56 行のコードに a があったと仮定するとswitch、コンパイラはあなたができないと不平を言っています:

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 に答える