Dela via


Kompilatorvarningar (nivå 1) C5301 och C5302

'#pragma omp for': "loop-index" ökar medan loopvillkoret använder "jämförelse"; icke-avslutande loop?

'#pragma omp for': "loop-index" minskar medan loopvillkoret använder "jämförelse"; icke-avslutande loop?

Anmärkningar

Tillsammans med förbättrat stöd för OpenMP 3.1 har vi lagt till två diagnostik, C5301 och C5302, för att förbättra utvecklarupplevelsen. Den här diagnostiken kontrollerar att loopvillkoren för omp parallel for är korrekta, baserat på om loopindexvariabeln ökar eller minskar. Dessa kontroller fungerar för både integral- och pekarindex.

Dessa kompilatorvarningar är nya i Visual Studio 2022 version 17.4.

Example

Exempelkoden visar en diagnostik för en for loop som minskar indexet, men den använder en <= jämförelse som testar om indexet är mindre än ett värde som är högre än startvärdet.

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

Lös problemet genom att ändra testvillkoret eller indexets riktning till ett som avslutas utan att orsaka spill, underflöde eller annat odefinierat beteende.