Share via


Upozornění kompilátoru (úroveň 1) C5301 a C5302

''#pragma omp for: 'loop-index' se zvyšuje, zatímco podmínka smyčky používá "porovnání"; neukončující smyčka?

'#pragma omp for': 'loop-index' se snižuje, zatímco podmínka smyčky používá "porovnání"; neukončující smyčku?

Poznámky

Spolu s vylepšenou podporou OpenMP 3.1 jsme přidali dvě diagnostiky C5301 a C5302, abychom vylepšili prostředí pro vývojáře. Tato diagnostika zkontroluje správnost podmínek omp parallel for smyčky na základě toho, jestli se indexová proměnná smyčky zvyšuje nebo snižuje. Tyto kontroly fungují pro celočíselné indexy i indexy ukazatelů.

Tato upozornění kompilátoru jsou nová v sadě Visual Studio 2022 verze 17.4.

Příklad

Ukázkový kód ukazuje diagnostiku smyčky for , která dekrementuje index, ale používá porovnání, které testuje <= , jestli je index menší než hodnota vyšší než počáteční hodnota.

// 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--)
                  ^
*/

Pokud chcete tento problém vyřešit, změňte testovací podmínku nebo směr změny indexu na ten, který se ukončí, aniž by to způsobilo přetečení, podtečení nebo jiné nedefinované chování.