Partilhar via


Avisos do compilador (nível 1) C5301 e C5302

''#pragma omp for: 'loop-index' aumenta enquanto a condição de loop usa 'comparação'; loop não terminante?

''#pragma omp for: 'loop-index' diminui enquanto a condição de loop usa 'comparação'; loop não terminante?

Comentários

Juntamente com o suporte aprimorado para OpenMP 3.1, adicionamos dois diagnósticos, C5301 e C5302, para melhorar a experiência do desenvolvedor. Esses diagnósticos verificam se as condições de loop para omp parallel for estão corretas, com base em se a variável de índice de loop está aumentando ou diminuindo. Essas verificações funcionam para índices integrais e de ponteiro.

Esses avisos do compilador são novos no Visual Studio 2022 versão 17.4.

Exemplo

O código de exemplo mostra um diagnóstico para um for loop que diminui o índice, mas usa uma <= comparação que testa se o índice é menor que um valor maior que o valor inicial.

// C5302.c
// compile using /openmp

#include <stdio.h>

int main()
{
    int a[100], i;
    int k = 1;
    #pragma omp parallel for
    for (i = 0; i <= 100; i--)
        a[i] = i*i;
}

/*
Compiler warning message:

.\C5302.c(11,19): warning C5302: '#pragma omp for': 'i' decreases while loop condition uses '<='; non-terminating loop?
    for (i = 0; i <= 100; i--)
                  ^
*/

Para resolver esse problema, altere a condição de teste ou a direção da alteração de índice para um que termina sem causar estouro, subfluxo ou outro comportamento indefinido.