Compartir a través de


C6268

Actualización: noviembre 2007

C6268

Advertencia C6268: Orden incorrecto de operaciones: (<TYPE1>)(<TYPE2>)x + y. Puede que falten paréntesis en (<TYPE1>)((<TYPE2>)x + y)

Esta advertencia indica que una expresión de conversión compleja podría implicar un problema de prioridad al realizar la aritmética con punteros. Dado que las conversiones de tipos se agrupan más estrechamente que los operadores binarios, el resultado podría no ser lo que el programador desea. En algunos casos, este defecto produce un comportamiento incorrecto o un bloqueo del programa.

En una expresión como:

(char *)p + offset

el desplazamiento se interpreta como un desplazamiento en caracteres; sin embargo, una expresión como:

(int *)(char *)p + offset

equivale a:

((int *)(char *)p) + offset

y por ello el desplazamiento se interpreta como un desplazamiento en enteros. Es decir, equivale a:

(int *)((char *)p + (offset * sizeof(int)))

que probablemente no sea lo que el programador desea.

Dependiendo de los tamaños relativos de los dos tipos, esto puede provocar una saturación del búfer.

Ejemplo

El código siguiente genera esta advertencia:

void f(int *p, int offset_in_bytes)
{
    int *ptr;
    ptr = (int *)(char *)p + offset_in_bytes;
    // code ...
}

Para corregir esta advertencia, utilice el código siguiente:

void f(int *p, int offset_in_bytes)
{
    int *ptr;
    ptr = (int *)((char *)p + offset_in_bytes);
    // code ...
}