Pages: [1]   Go Down
Author Topic: [RESOLU] Ré-écriture d'une fonction  (Read 578 times)
0 Members and 1 Guest are viewing this topic.
IDF/SO
Offline Offline
Edison Member
*
Karma: 41
Posts: 2306
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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.
« Last Edit: January 12, 2012, 02:53:27 pm by 68tjs » Logged

Offline Offline
Sr. Member
****
Karma: 2
Posts: 259
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hello!

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

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5405
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

IDF/SO
Offline Offline
Edison Member
*
Karma: 41
Posts: 2306
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5405
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

IDF/SO
Offline Offline
Edison Member
*
Karma: 41
Posts: 2306
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

merci, voila qui est clair.
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5405
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

merci, voila qui est clair.
Pas de quoi smiley-kitty
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Pages: [1]   Go Up
Jump to: