Partilhar via


C6268

Aviso C6268: Ordem incorreta de operações: (<TYPE1>)(<TYPE2>)x + y.Parênteses ausentes possíveis em (<TYPE1>)((<TYPE2>)x + y)

Esse aviso indica que uma expressão complexa convertido pode envolver um problema de precedência ao executar a aritmética do ponteiro.Como as conversões se agrupam mais perto de operadores binários, o resultado pode não ser o que o programador pretendeu.Em alguns casos, esse defeito causa o comportamento incorreto ou falha de programa.

Em uma expressão como:

(char *)p + offset

o deslocamento é interpretado como um deslocamento em caracteres; entretanto, uma expressão como:

(int *)(char *)p + offset

é equivalente a:

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

e o deslocamento é interpretado bem como um deslocamento em inteiros.Em outras palavras é equivalente a:

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

é provável que não ser o que o programador pretendeu.

Dependendo dos tamanhos relativos dos dois tipos, isso pode levar a uma excesso de buffer.

Exemplo

O código a seguir gera este aviso:

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

Para corrigir esse aviso, use o seguinte código:

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