Bagikan melalui


Peringatan kompilator (tingkat 1) C5301 dan C5302

'#pragma omp for': 'loop-index' meningkat sementara kondisi perulangan menggunakan 'perbandingan'; perulangan non-penghentian?

'#pragma omp for': 'loop-index' menurun saat kondisi perulangan menggunakan 'perbandingan'; perulangan non-penghentian?

Keterangan

Seiring dengan peningkatan dukungan untuk OpenMP 3.1, kami telah menambahkan dua diagnostik, C5301 dan C5302, untuk meningkatkan pengalaman pengembang. Diagnostik ini memeriksa bahwa kondisi perulangan untuk omp parallel for sudah benar, berdasarkan apakah variabel indeks perulangan meningkat atau menurun. Pemeriksaan ini berfungsi untuk indeks integral dan pointer.

Peringatan kompilator ini baru di Visual Studio 2022 versi 17.4.

Contoh

Kode sampel menunjukkan diagnostik untuk perulangan for yang mengurangi indeks, tetapi menggunakan perbandingan <= yang menguji apakah indeks kurang dari nilai yang lebih tinggi dari nilai awal.

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

Untuk mengatasi masalah ini, ubah kondisi pengujian atau arah perubahan indeks menjadi yang berakhir tanpa menyebabkan luapan, aliran bawah, atau perilaku lain yang tidak ditentukan.