Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aviso C6268: ordem incorreta de operações: (<TYPE1>)(<TYPE2>) x + y.Possíveis parênteses faltando em (<TYPE1>) ((<TYPE2>) x + y)
Este aviso indica que uma expressão de conversão complexa pode envolver um problema de precedência ao realizar aritmética de ponteiro.Porque as projeções de grupo mais perto do que operadores binários, o resultado não pode ser o programador pretendia.Em alguns casos, esse defeito causa um comportamento incorreto ou uma falha no programa.
Em uma expressão, como:
(char *)p + offset
o deslocamento é interpretado como um deslocamento em caracteres; No entanto, uma expressão como:
(int *)(char *)p + offset
é equivalente a:
((int *)(char *)p) + offset
e, portanto, o deslocamento é interpretado como um deslocamento em números inteiros.Em outras palavras, é equivalente a:
(int *)((char *)p + (offset * sizeof(int)))
que não é provável que haja o programador pretendia.
Dependendo dos tamanhos relativos dos dois tipos, isso pode causar uma saturação 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 código a seguir:
void f(int *p, int offset_in_bytes)
{
int *ptr;
ptr = (int *)((char *)p + offset_in_bytes);
// code ...
}