Avviso C6268
Ordine errato delle operazioni: ('TYPE1')('TYPE2')x + y. Possibili parentesi mancanti in ('TYPE1')(('TYPE2')x + y)
Questo avviso indica che un'espressione cast complessa potrebbe comportare un problema di precedenza durante l'esecuzione dell'aritmetica del puntatore. Poiché esegue il cast di gruppi più strettamente rispetto agli operatori binari, il risultato potrebbe non essere quello previsto dal programmatore. In alcuni casi, questo difetto causa un comportamento errato o un arresto anomalo del programma.
Osservazioni:
In un'espressione, ad esempio:
(char *)p + offset
l'offset viene interpretato come offset in caratteri; Tuttavia, un'espressione come:
(int *)(char *)p + offset
Equivale a:
((int *)(char *)p) + offset
e quindi l'offset viene interpretato come offset in interi. In altre parole, equivale a:
(int *)((char *)p + (offset * sizeof(int)))
che non è probabile che sia ciò che il programmatore intendeva.
A seconda delle dimensioni relative dei due tipi, questo offset può causare un sovraccarico del buffer.
Nome dell'analisi del codice: MISPARENTHESIZED_CASTS
Esempio
Il codice seguente genera questo avviso:
void f(int *p, int offset_in_bytes)
{
int *ptr;
ptr = (int *)(char *)p + offset_in_bytes;
// code ...
}
Per correggere questo avviso, usare il codice seguente:
void f(int *p, int offset_in_bytes)
{
int *ptr;
ptr = (int *)((char *)p + offset_in_bytes);
// code ...
}
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per