编译器警告(级别 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--)
                  ^
*/

若要解决此问题,请将测试条件或索引方向更改为终止,而不会导致溢出、下溢或其他未定义的行为。