Вопрос

Я пытаюсь использовать OpenMP для создания параллельного цикла for в Visual Studio 2005 Professional.Я включил omp.h и указал флаг компилятора /openmp.Однако я не могу скомпилировать даже простейший параллельный цикл for.

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

Вышеупомянутое приводит к ошибке компилятора C3005 в строке #pragma.

Google не особо помог.Я нашел только один малоизвестный японский веб-сайт, на котором у пользователя были похожие проблемы.Ни слова о резолюции.

Стандартный параллельный блок компилируется нормально.

#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» сбивает с толку компилятор, но это не должно быть так.Есть идеи?

Это было полезно?

Решение

Я нашел проблему.Какой-то гений определил следующий макрос глубоко внутри заголовков:

#define for   if ( false ) ; else for

Я могу только предположить, что это использовалось для того, чтобы переменные, объявленные в циклах for, имели правильную область видимости в Visual C++ 6.Отмена определения или закомментирование макроса решила проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top