Le moulage d'un pointeur NULL dans la fonction argument a entraîné la violation de Misra la Règle 11.3

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

  •  12-11-2019
  •  | 
  •  

Question

Je définir un NULL_PTR comme 0U

Puis appeler une fonction avec cette NULL_PTR comme argument.

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

Appelé prototype de fonction:

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

Sur la compilation, Misra a soulevé une règle 11.3 erreur de violation.(Une fonte ne doit pas être effectuée entre un pointeur de type et un type intégral.)

Mais si je viens de passer le NULL_PTR comme suit, à l'absence de violation.

read_some_data(2U, NULL_PTR, NULL_PTR);

Qui est la meilleure façon de le faire?Supprimer Misra 11.3 de la règle ou de passer la NULL_PTR sans casting?

Était-ce utile?

La solution 3

J'ai utilisé NULL_PTR dans mon fichier d'en-tête pour éviter l'utilisation ET la configuration interne du fichier yvals.h qui définit la valeur NULL.Mais ce n'est pas un problème depuis que j'ai peut-être utiliser yvals.h plus tard pour d'autres raisons.

Si l'utilisation de NULL ou NULL_PTR, je suppose que le consensus général est de passer la valeur NULL sans moulage.Ma fonction n'a aucun problème à accepter.De cette façon, je ne peux éviter la suppression de Misra 11.3 règle.

De l'espoir, je suis de procéder de la bonne façon.

Autres conseils

Quel est le problème avec la Norme "ZÉRO"?

Pourquoi cast si vous pouvez l'éviter?Cast toujours rend le code un peu plus sale et des conseils qu'il ya quelque chose hacky effectuée.

Donc, je voudrais juste passer NULL_PTR sans moulage. Après vérification de la spécification de fonction qu'il peut accepter NULL_PTR comme second paramètre!!!

Sur la compilation, Misra a soulevé une règle 11.3 erreur de violation.

Juste pour être pédant, MISRA ne soulèvent pas une erreur de violation, votre compilateur soulevé un MISRA violation des règles d'erreur.

À partir de ce que vous avez posté, je ne suis pas convaincu que la violation est correcte...

D'autre part, personnellement, je préfère définir NULL_PTR comme (void *)0u parce que (à proprement parler) 0 n'est pas un pointeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top