编译器警告(级别 1)C5301 和 C5302
“
#pragma omp for
”:循环条件使用“comparison”时,“loop-index”会增加;非终止循环?
“
#pragma omp for
”:循环条件使用“comparison”时,“loop-index”会减少;非终止循环?
备注
除了改进了对 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--)
^
*/
若要解决此问题,请将测试条件或索引方向更改为终止,而不会导致溢出、下溢或其他未定义的行为。