Condividi tramite


C6269

avviso C6269: possibile ordine errato delle operazioni: risoluzione del riferimento ignorata

L'avviso indica che il risultato di una risoluzione del riferimento del puntatore è ignorato, pertanto ci si chiede perché il riferimento del puntatore venga risolto nella prima posizione.

Il compilatore ottimizzerà correttamente la risoluzione del riferimento ingiustificata. In alcuni casi, tuttavia, l'errore può sottintendere un errore di precedenza o di logica.

Una causa diffusa per questo errore è un'istruzione di espressione nel formato:

*p++;

Se lo scopo di questa istruzione è semplicemente incrementare il puntatore p, la dereferenziazione non è necessaria. Se lo scopo, invece, è incrementare la posizione a cui fa riferimento p, il comportamento del programma non sarà quello previsto, in quanto il costrutto *p++ verrà interpretato come * (p++) anziché (*p)++.

Esempio

Il codice seguente genera questo avviso:

#include <windows.h>

void f( int *p )
{
    // code ...
  if( p != NULL )
    *p++;
    // code ...
}

Per risolvere il problema, utilizzare le parentesi come riportato nel codice seguente:

#include <windows.h>

void f( int *p )
{
    // code ...
  if( p != NULL )
    (*p)++;
    // code ...
}