Compilerwarnungen (Ebene 1) C5301 und C5302
'': "
#pragma omp for
Loop-Index" erhöht sich, während die Schleifenbedingung "Vergleich" verwendet; nicht beendete Schleife?
'': '
#pragma omp for
loop-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.