共用方式為


編譯程式警告 (層級 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--)
                  ^
*/

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