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。

谷歌并没有太多帮助。我只发现一个不起眼的日本网站,其中一位用户有类似的问题。没有提到决议。

一个标准的并行块编译得很好。

#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 回答