共用方式為


編譯器警告 (層級 1) C5301 和 C5302

' #pragma omp for ': ' loop-index ' 會在迴圈條件使用 ' comparison ' 時增加; 非終止迴圈?

' #pragma omp for ': ' loop-index ' 會在迴圈條件使用 ' comparison ' 時減少; 非終止迴圈?

備註

除了改善 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--)
                  ^
*/

若要解決此問題,請將測試條件或索引的方向變更為終止,而不會造成溢位、下溢或其他未定義的行為。