2

現在Xcodeで書いているCプログラムに行き詰まっています。数時間作業した後、Xcode は突然「expected expression」メッセージで不平を言い始めました。

  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;

だから何も面白いことはありません。

何か案は?最後に C プログラムを書いたのは 23 年前なので、何か見落としているかもしれません...

4

1 に答える 1

10

そのケースを中括弧で囲む必要があります。C では、変数の初期化がある場合、switch-case を中かっこで囲む必要があります。次のようになります。

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

コンパイラがswith-case内で変数を宣言することを許可している場合でも、そうするのは良い考えではありません. そのケースをヘルパー関数に置き換えることができる可能性があります。

低レベルの説明については、これを参照してください。

于 2013-08-13T20:27:29.440 に答える