Condividi tramite


Avviso C28302

Per il parametro di riferimento C++ 'parameter_name', è stato trovato un operatore aggiuntivo _Deref_ in 'annotazione'.

Questo avviso viene segnalato quando viene usato un livello aggiuntivo di _Deref_ su un parametro di un tipo riferimento, T &aad esempio . Un errore comune quando si usano le annotazioni SAL1 consiste nell'usare __deref su un tipo di riferimento. I tipi di riferimento vengono riconosciuti da SAL, quindi tutte le annotazioni sono già applicate al tipo sottostante. In genere non si tratta di un problema in SAL2 perché l'annotazione a virgola mobile __deref libera è stata rimossa. Se si intende applicare un'annotazione a un sottotipo, è consigliabile usare invece le annotazioni SAL2 _AT_ o _Outref_ .

Esempio

// Oops, trying to apply __elem_writableTo to the pointer being referenced
void f( __deref __elem_writableTo(size) int *& buffer, int size);

void func()
{
  int buffer[100] = {};
  int *pbuffer = buffer;
  f(pbuffer, 100);
}

Per risolvere il problema, eseguire l'aggiornamento alle annotazioni SAL2:

// Fix warning by switching to SAL2 syntax which has annotations that better describe what the function does.
void f( _Outref_result_buffer_(size) int *& buffer);

Vedi anche

Informazioni su SAL