Поделиться через


Предупреждения компилятора (уровень 1) C5301 и C5302

'#pragma omp for': "цикл-индекс" увеличивается, пока условие цикла использует "сравнение"; не завершающийся цикл?

'#pragma omp for': "цикл-индекс" уменьшается, в то время как условие цикла использует "сравнение"; не завершающий цикл?

Замечания

Наряду с улучшенной поддержкой OpenMP 3.1 мы добавили два диагностика, C5301 и C5302, чтобы улучшить интерфейс разработчика. Эти диагностика проверьте правильность условий omp parallel for цикла в зависимости от того, увеличивается ли переменная индекса цикла или уменьшается. Эти проверки работают как для целочисленных, так и указателей индексов.

Эти предупреждения компилятора являются новыми в Visual Studio 2022 версии 17.4.

Пример

В примере кода показана диагностика цикла for , который уменьшает индекс, но он использует <= сравнение, которое проверяет, меньше ли значение индекса выше начального значения.

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

Чтобы устранить эту проблему, измените условие теста или направление изменения индекса на тот, который завершается без возникновения переполнения, переполнения или другого неопределенного поведения.