Compilerwarnungen (Ebene 1) C5301 und C5302

'': "#pragma omp forLoop-Index" erhöht sich, während die Schleifenbedingung "Vergleich" verwendet; nicht beendete Schleife?

'': '#pragma omp forloop-index' verringert sich, während die Schleifenbedingung "Vergleich" verwendet; nicht beendete Schleife?

Hinweise

Zusammen mit verbesserter Unterstützung für OpenMP 3.1 haben wir zwei Diagnose, C5301 und C5302 hinzugefügt, um die Entwicklererfahrung zu verbessern. Diese Diagnose überprüfen, ob die Schleifenbedingungen omp parallel for korrekt sind, je nachdem, ob die Schleifenindexvariable erhöht oder verringert wird. Diese Prüfungen funktionieren sowohl für integrale als auch für Zeigerindizes.

Diese Compilerwarnungen sind neu in Visual Studio 2022, Version 17.4.

Beispiel

Der Beispielcode zeigt eine Diagnose für eine for Schleife, die den Index erhöht, verwendet aber einen <= Vergleich, der testet, ob der Index kleiner als ein Wert ist, der höher als der Startwert ist.

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

Um dieses Problem zu beheben, ändern Sie die Testbedingung oder die Richtung der Indexänderung in eine, die beendet wird, ohne dass Überlauf, Unterlauf oder anderes nicht definiertes Verhalten verursacht wird.