Share via


Derleyici uyarıları (düzey 1) C5301 ve C5302

'#pragma omp for': Döngü koşulu 'karşılaştırma' kullanırken 'döngü-dizini' artar; sonlandırıcı olmayan döngü?

'#pragma omp for': Döngü koşulu 'karşılaştırma' kullanırken 'döngü-dizini' azalır; sonlandırılmayan döngü?

Açıklamalar

OpenMP 3.1 için geliştirilmiş desteğin yanı sıra geliştirici deneyimini geliştirmek için C5301 ve C5302 olmak üzere iki tanılama ekledik. Bu tanılamalar, döngü dizini değişkeninin arttığını veya azaldığını temel alarak için döngü koşullarının omp parallel for doğru olup olmadığını denetler. Bu denetimler hem integral hem de işaretçi dizinleri için çalışır.

Bu derleyici uyarıları Visual Studio 2022 sürüm 17.4'te yenidir.

Örnek

Örnek kod, dizini azaltan bir for döngü için tanılama gösterir, ancak dizinin başlangıç değerinden daha yüksek bir <= değerden küçük olup olmadığını test eden bir karşılaştırma kullanır.

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

Bu sorunu çözmek için test koşulunu veya dizin değişikliğinin yönünü, taşma, yetersizlik veya diğer tanımlanmamış davranışlara neden olmadan sonlandırılan bir durumla değiştirin.