1

このエラーは、C ファイル (CPP ではない) で作業している場合にのみ発生します。

いくつかのopenglサンプルの作業中に非常に奇妙なエラーに遭遇しました。以下のコードに絞り込みました。これにより、同じエラーが発生し、タイプが見つかりません

#include "stdlib.h"
void Initialize(int, char*[]);

void main()
{
}

void Initialize(int argc, char* argv[])
{
    int i;
    for(i = 10; i>0;i--)
    {
        int j=0;
        j = j+2;
        int GlewInitResult2;
    }
}

Visual Studio 2008、OS: Windows XP を使用しました。

なぜこれが起こっているのか理解できませんか?これはコンパイラのバグですか?

(ところで、ファイルを .CPP ファイルとして保存すると、正常にコンパイルされます)

4

3 に答える 3

4

ステートメントの後に宣言があります。C の新しいバージョン (C99 など) ではこれを使用できますが、古いバージョンでは使用できません。Microsoft の C コンパイラは古いです。C++ では問題ないので、ビルドできます。

于 2012-11-20T09:39:44.860 に答える
2

Microsoft コンパイラは C89 のみをサポートするため、宣言とコードを混在させることはできません。これは C++ で許可されています。ソースファイルに.c拡張子が付いている場合は C ソース、付いている.cpp場合は C++ として扱われます。

C を修正するには、すべての変数宣言を、それらが使用されるスコープの先頭に置きます。

于 2012-11-20T09:39:24.303 に答える
2

私の知る限り、Visual Studio 2008 は完全には c99 に準拠していません。

標準c99では、プログラムの最初で変数を宣言する必要があります。ただし、c99変数の宣言は関数内のどこでも行うことができます。

また、c++ にはそのような制限はありません。Windows では、拡張子を持つファイルを作成する.cppと、c++ ファイルとして扱われます。したがって、cpp としてコンパイルすると、同じプログラムが動作します。

ソリューション:

  1. 関数の先頭で変数を宣言します。これも良い習慣です!
  2. コンパイラを変更してください! (これを見てください。コンパイラ エラーはありません!)
于 2012-11-20T09:44:19.613 に答える