0

OpenMP を使用して、Visual Studio 2005 Professional で並列 for ループを作成しようとしています。omp.h をインクルードし、/openmp コンパイラ フラグを指定しました。ただし、最も単純な並列 for ループをコンパイルすることさえできません。

#pragma omp parallel for
for ( int i = 0; i < 10; ++i )
{
    int a = i + i;
}

上記は #pragma 行でコンパイラ エラー C3005 を生成します。

Google はあまり役に立ちませんでした。同様の問題を抱えているユーザーがいるあいまいな日本語の Web サイトを 1 つだけ見つけました。解決策については言及されていません。

標準の並列ブロックは正常にコンパイルされます。

#prgram omp parallel
{
    // Do some stuff
}

それは、for ループを追加しようとするまでです。

#pragma omp parallel
{
    #pragma omp for
    for ( int i = 0; i < 10; ++i )
    {
        int a = i + i;
    }
}

上記により、コンパイラ エラー C3001 が発生します。「for」はコンパイラを混乱させるようですが、そうすべきではありません。何か案は?

4

1 に答える 1

0

問題が見つかりました。一部の天才は、ヘッダーの奥深くで次のマクロを定義しました。

#define for   if ( false ) ; else for

私の唯一の推測では、これは for ループで宣言された変数を Visual C++ 6 で適切にスコープするために使用されたということです。マクロを未定義にするかコメントアウトすると、問題が解決しました。

于 2009-10-14T01:16:56.643 に答える