Avertissements du compilateur (niveau 1) C5301 et C5302

'#pragma omp for' : 'loop-index' augmente tandis que la condition de boucle utilise 'comparaison' ; boucle non terminant ?

'#pragma omp for' : 'loop-index' diminue tandis que la condition de boucle utilise 'comparison' ; boucle non terminant ?

Notes

En plus de la prise en charge améliorée d’OpenMP 3.1, nous avons ajouté deux diagnostics, C5301 et C5302, pour améliorer l’expérience du développeur. Ces diagnostics case activée que les conditions de boucle sont omp parallel for correctes, selon que la variable d’index de boucle augmente ou diminue. Ces case activée fonctionnent pour les index intégraux et pointeurs.

Ces avertissements du compilateur sont nouveaux dans Visual Studio 2022 version 17.4.

Exemple

L’exemple de code montre un diagnostic pour une for boucle qui décrémente l’index, mais utilise une <= comparaison qui teste si l’index est inférieur à une valeur supérieure à la valeur de départ.

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

Pour résoudre ce problème, modifiez la condition de test ou la direction de l’index qui se termine sans provoquer de dépassement de capacité, de sous-flux ou d’autres comportements non définis.