2017-09-20 1 views
6

Il peut ne pas être clair à partir du titre. Je suis tombé sur le code suivant dans un projet STM32 intégré. Je ne comprends pas la ligne à l'intérieur de la fonction.Que signifie cette instruction dans C: "(void) ptr;"

static void txend1(UARTDriver *uartp) { 
     (void)uartp; // what does this do? Is it a statement? 
    } 

J'ai essayé de chercher ailleurs en ligne, mais la plupart des résultats sont des pointeurs CASTING d'annuler des pointeurs, que je ne pense pas que ce soit. Merci pour l'aide!

+3

Cela signifie « ne me dites pas que je vous écris du mauvais code, je * * intention de ne pas utiliser la argument". C compilateurs sont un peu anales à ce sujet et ont tendance à générer un avertissement. Souvent, mais pas ici. Il ne voulait pas faire quelque chose de spécial à la fin de la transmission, pas inhabituel. Le pointeur de fonction n'était pas son choix. –

+0

@HansPassant Cela peut être dû à une API imposée de la part d'un tiers et/ou à l'uniformité - par exemple, il peut y avoir une implémentation alternative qui utilise le pointeur. – SomeWittyUsername

+0

Yup, c'est ce que signifie "le pointeur de fonction n'était pas son choix". –

Répondre

12

Ceci est juste un portable way to suppress the warning sur ce paramètre uart non utilisé.

Cela n'a aucun effet, mais les compilateurs le voient tel qu'il est utilisé et n'émettent aucun avertissement. Très utile lorsque le prototype de la fonction est imposé/ne peut pas être changé (fonction de rappel) mais votre implémentation n'a pas besoin de ce paramètre.

(notez que gcc favorise la construction __attribute__((unused)), plus facile à comprendre, mais pas compatible avec tous les compilateurs)

+0

Hm ... er..pourquoi ne pas dire au compilateur de ne pas avertir au lieu de coder un non-sens? – savram

+2

parce que vous voulez des avertissements pour les endroits que vous n'étiez pas au courant de c'est comment vous l'empêchez pour les endroits que vous êtes. Certains compilateurs ont un pragma ou une directive, mais gcc et d'autres vous laisseront faire x = x; ou peut-être comme dans ce cas x; –

+2

@savram Vous souhaiterez peut-être être averti des autres variables inutilisées. – Gam