Erro do compilador C3038
'var': a variável em cláusula 'private' não pode ser uma variável de reduction em contexto delimitador
As variáveis que aparecem na cláusula reduction de uma diretiva parallel não podem ser especificadas em uma cláusula private em uma diretiva de compartilhamento em trabalho que se associa ao constructo parallel.
A amostra a seguir gera C3038:
// C3038.cpp
// compile with: /openmp /c
int g_i, g_i2;
int main() {
int i;
#pragma omp parallel reduction(+: g_i)
{
#pragma omp for private(g_i) // C3038
// try the following line instead
// #pragma omp for private(g_i2)
for (i = 0; i < 10; ++i)
g_i += i;
}
}