Condividi tramite


Avvisi del compilatore (livello 1) C5301 e C5302

'#pragma omp for': 'loop-index' aumenta mentre la condizione del ciclo usa 'comparison'; ciclo non terminante?

'#pragma omp for': 'loop-index' diminuisce mentre la condizione del ciclo usa 'comparison'; ciclo non terminante?

Osservazioni:

Oltre al supporto migliorato per OpenMP 3.1, sono state aggiunte due diagnostiche, C5301 e C5302, per migliorare l'esperienza di sviluppo. Questi controlli diagnostici verificano che le condizioni del ciclo per omp parallel for siano corrette, in base al fatto che la variabile dell'indice del ciclo aumenti o diminuisca. Questi controlli funzionano sia per gli indici integrali che per gli indici puntatori.

Questi avvisi del compilatore sono nuovi in Visual Studio 2022 versione 17.4.

Esempio

Il codice di esempio mostra una diagnostica per un for ciclo che decrementa l'indice, ma usa un <= confronto che verifica se l'indice è minore di un valore superiore al valore iniziale.

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

Per risolvere questo problema, modificare la condizione di test o la direzione della modifica dell'indice a una che termina senza causare overflow, underflow o altro comportamento non definito.