Go Down

Topic: [RESOLU] Ré-écriture d'une fonction (Read 610 times) previous topic - next topic

68tjs

Jan 12, 2012, 06:06 pm Last Edit: Jan 12, 2012, 08:53 pm by 68tjs Reason: 1
EDIT : Synthèse des réponses :
Si les deux fonctions n'ont pas le même nombre d'arguments ou des arguments de types différents alors le compilateur décide d'utiliser la fonction qui correspond a l'appel.
Si les deux fonctions ont le même nombre d'argument ET de même type alors le compilateur génère une erreur.
----------------------------------------------------------------------------------------------------------------------------------------
Message original
Je passe directement à un exemple :
IDE : arduino (debian testing version dans les dépots 1.0-> pas le choix et pas envie d'utiliser une version non estampillée Debian)
fonction réécrite : shiftOut()

J'ai ré-écrit la fonction en la simplifiant et en la rendant plus véloce ( utilisation directe des registres).
Peut importe si la fonction n'est pas universelle du moment qu'elle est strictement adaptée à mon besoin qui est de commander un afficheurs 7 segments + DP avec un registre à décalage.
Que se passe-t-il si je l'ajoute dans mon programme ?
-> L'IDE l'ignore
-> Cela crée un conflit bloquant
-> Pour l'IDE c'est la fonction du programme qui sera prioritaire et donc celle de la bibliothèque sera ignorée ?
Code: [Select]

void shiftOut( uint8_t chiffre)
{
 uint8_t i ;
 uint8_t segments ;  // variable intermédiaire, pas nécessaire mais code plus facile à relire

 for (i=0 ; i < 8 ; i++)
 {
   segments = !!(chiffre & ( 1 << (7-i)));
   if (segments == 1) PORTB |= _BV(DATA) ;
   if (segments == 0) PORTB &= ~_BV(DATA) ;
   PORTB |= _BV(HORLOGE) ;
   delay(1);
   PORTB &= ~_BV(HORLOGE) ;  
 }
}


J'accepte volontiers toutes critiques constructives.

schizophrene

Hello!

J'attends de voir la réponse, cela m'intéresse.
Au pire, renommer la fonction. Ex: shiftOut2()

skywodd


Que se passe-t-il si je l'ajoute dans mon programme ?
-> L'IDE l'ignore
-> Cela crée un conflit bloquant
-> Pour l'IDE c'est la fonction du programme qui sera prioritaire et donc celle de la bibliothèque sera ignorée ?

Ta fonction shiftOut ne possède pas le même nombre d'arguments que la fonction shiftOut de la lib arduino, donc normalement en standard c99 (c++) le compilateur devrait reconnaitre quel fonction utiliser et ne pas sortir d'erreur de redéfinition.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

68tjs

OK merci, une réponse basée sur un standard ça me conviens parfaitement.
Mais, pour ma culture personnelle, s'il y avait eu le même nombre d'argument cela ferait quoi ?

skywodd


OK merci, une réponse basée sur un standard ça me conviens parfaitement.
Mais, pour ma culture personnelle, s'il y avait eu le même nombre d'argument cela ferait quoi ?

Si il y avait le même nombre d'arguments avec les même types le compilateur sortirai une erreur de redéfinition, si par contre tu as le même nombre d'arguments mais que un (ou plusieurs) des types diffère alors la "nouvelle" fonction devient une surcharge de la fonction précédente et c'est lors de l'appel de la fonction que le compilateur décide qui il doit appeler selon le type de variable fourni lors de l'appel.

Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

68tjs


skywodd

Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up