Предупреждения компилятора (уровень 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--)
^
*/
Чтобы устранить эту проблему, измените условие теста или направление изменения индекса на тот, который завершается без возникновения переполнения, переполнения или другого неопределенного поведения.