Il lancio di un argomento di funzione null punta ha portato alla violazione della regola 11.3

StackOverflow https://stackoverflow.com/questions/5458678

  •  12-11-2019
  •  | 
  •  

Domanda

Definisco a NULL_PTR come 0U

Quindi chiama una funzione con questo NULL_PTR come argomento.

read_some_data(2U, (uint8_t *const) NULL_PTR, (uint8_t *const) NULL_PTR);

Chiamato prototipo di funzione:

int16_t read_some_data(const uint8_t id,   uint8_t *const data_1, uint8_t *const data_2);

Alla compilazione, Misra ha sollevato un errore di violazione della regola 11.3. (Un cast non dovrebbe essere eseguito tra un tipo di punta e un tipo integrale.)

Ma se passo solo il NULL_PTR Come segue, nessuna violazione.

read_some_data(2U, NULL_PTR, NULL_PTR);

Qual è il modo migliore per fare? Sopprimere la regola di misra 11.3 o semplicemente passare il NULL_PTR senza casting?

È stato utile?

Soluzione 3

Ho usato NULL_PTR nel mio file di intestazione per evitare l'utilizzo del file di configurazione interno IAR YVals.h che definisce null. Ma questo non è un problema poiché potrei dover usare yvals.h in seguito per altri motivi.

Che si tratti di usare NULL o NULL_PTR, presumo che il consenso generale sia di passare null senza casting. La mia funzione non ha alcun problema ad accettarlo. In questo modo, posso evitare di sopprimere la regola di Misra 11.3.

Spero di procedere nel modo giusto.

Altri suggerimenti

Cosa c'è che non va con lo standard 'null'?

Perché lanciare se puoi evitarlo? Il cast rende sempre il codice un po 'più sporco e suggerisce che c'è qualcosa di ha eseguito.

Quindi passerei semplicemente null_ptr senza casting. Dopo aver controllato le specifiche della funzione che può accettare null_ptr come secondo parametro !!!

Alla compilazione, Misra ha sollevato un errore di violazione della regola 11.3.

Solo per essere pedante, Misra non ha sollevato un errore di violazione, il compilatore ha sollevato un errore di violazione delle regole di Misra.

Da quello che hai pubblicato, non sono convinto che la violazione segnalata sia corretta ...

D'altra parte, definirei personalmente NULL_PTR come (void *)0u Perché (a rigor di termini) 0 non è un puntatore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top