컴파일러 경고(수준 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--)
^
*/
이 문제를 해결하려면 인덱스의 테스트 조건 또는 방향을 오버플로, 언더플로 또는 기타 정의되지 않은 동작을 유발하지 않고 종료되는 것으로 변경합니다.