Naknet blog

Nothing to believe, nothing else to believe.

<< 半月実写化について | main | 時かけ見てきました。 >>

C2275の罠

C99を除く「C」言語では、ブロックの途中で変数を宣言することは許されていません。
ですが、MSVCでは(v8.0で確認)この間違いをC2275:「この型は演算子として使用できません」やC2143:「構文エラー : ';' が '型' の前にありません。」としてリポートします。

はい、具体的には、

void func( void )
{
	int x = 0, y = 0;
	printf( "x=%d, y=%d\n", x, y );
	int z;	/* C2143 */
}
って感じです。

intの部分が例えば

typedef struct _tagTest
{
	int m, n, o;
} Test;
のようなTestを宣言しようとして
Test z; となっていると、C2143の代わりにC2275を吐きます。

本当に分かりにくいです。もっとまともなメッセージを吐けと言いたいところですが、(C++ではなく)C専用に書かれたコンパイラには、実際謎な文に見えるのでしょう。

厳密に言えば // によるコメントもCではサポートしていませんが、プリプロセッサがC/C++で共通っぽいので // も通るようです。

なんというか、ぐだぐだだなと。



comments (2) | trackbacks (0)

Comments

Very good results concerning doing this 脹nternet site. I really treasured surfing this, and therefore will probably revisit continually, wanting to find anything innovative.
HCG | 2013/06/05 06:08 AM
Top 8 (Free or Dirt Cheap) Website Building Tools WeUse Everyday - that You Should Know About When You StartBuilding Your Website!
Augustin Maradona Olarian | 2015/01/10 03:13 PM

Comment Form

  • "http"等はNGワードになっています。
  • どうしても投稿できない場合・返信が必要な場合は、メールでお願いします(nospam.を削除してください)。

Trackbacks