4

このコードをコンパイルしようとすると、Case Expression Not Constantエラーが発生します。理由がわかりません。

while ((*datalen) == 0)
    crReturn(NULL);  //error here
st->len = (st->len << 8) + **data;

関数 crReturn() は次のように定義されます。

#define crReturn(z) \
do {\
    *crLine =__LINE__; return (z); case __LINE__:;\
} while (0)
4

1 に答える 1

12

問題は、MSVC++ が「エディット アンド コンティニュ」機能のデバッグ情報を生成するように構成されている場合、標準外の (そして独自のドキュメントに反する) ことを行い、この標準外__LINE__が Simon Tatham のコルーチン マクロで使用されている方法を壊すことです。

これについて、PuTTY ソース コードのコメントは次のように述べています。

In particular, if you are getting `case expression not constant'
errors when building with MS Visual Studio, this is because MS's
Edit and Continue debugging feature causes their compiler to
violate ANSI C. To disable Edit and Continue debugging:

- right-click ssh.c in the FileView
- click Settings
- select the C/C++ tab and the General category
- under `Debug info:', select anything _other_ than `Program
Database for Edit and Continue'.

したがって、おそらくそうする必要があります。(実際、この回答を投稿する前にコメントでこれについて話し合ったので、あなたはすでにそうしていることを知っています:-)。

于 2012-07-12T23:50:56.543 に答える