Compartir a través de


Advertencias del compilador (nivel 1) C5301 y C5302

'#pragma omp for': 'loop-index' aumenta mientras que la condición de bucle usa 'comparison'; ¿no termina el bucle?

'#pragma omp for': 'loop-index' disminuye mientras la condición de bucle usa 'comparison'; ¿no es un bucle de terminación?

Comentarios

Junto con la compatibilidad mejorada con OpenMP 3.1, hemos agregado dos diagnósticos, C5301 y C5302, para mejorar la experiencia del desarrollador. Estos diagnósticos comprueban que las condiciones del bucle para omp parallel for son correctas, en función de si la variable de índice de bucle aumenta o disminuye. Estas comprobaciones funcionan para índices enteros y de puntero.

Estas advertencias del compilador son nuevas en Visual Studio 2022, versión 17.4.

Ejemplo

El código de ejemplo muestra un diagnóstico de un for bucle que disminuye el índice, pero usa una <= comparación que comprueba si el índice es menor que un valor mayor que el valor inicial.

// 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--)
                  ^
*/

Para resolver este problema, cambie la condición de prueba o la dirección del cambio de índice a uno que finalice sin causar desbordamiento, subflujo u otro comportamiento indefinido.