Site icon AranaCorp

Récapitulatif sur la définition de fonction en C

En programmation, il est très courant voir nécessaire de faire appel à des fonctions qui nécessite une définition particulière. C’est d’autant plus vrai lorsque des blocs de codes se répètent dans un même programme. Un ensemble de fonction et d’objet sont généralement rassemblé dans des librairies. Nous allons voir dans ce tutoriel la définition de fonction en C appliquée à Arduino.

Syntaxe pour la définition de fonction en C

La syntaxe de la définition d’une fonction en C est constitué de 4 parties:

bool nom_fonction(int arg1, char arg2){
  bool out; //definition variable locale
  //corps de la fonction
  return out;
}

Le type de la fonction, son nom et la définition des arguments correspondent au prototype de la fonction, c’est à dire, aux informations minimum à connaître pour pouvoir appeler la fonction.

resultat = nom_fonction(param1,param2);

Exemples

int convert(int val){
  return map(val,0,1023,-100,100);
}


bool isValid(int val){
  if(val>-5 && val<50){
    return true; 
  }else{
    return false;
  }
}


int increment(int val, int increment,int maxval, int minval){
  val+=increment;
  if(val>maxval) val=minval;
  if(val<minval) val=maxval;

  return val;
}


On appelle une fonction qui ne retourne pas de valeur une procédure, elle est caractérisée par un type void (vide en Français).

int myVar=0;

void setup(){
  Serial.begin(115200);
}

void loop(){
   printVar("myVar",myVar);
   myVar+=1;
   delay(500);
}

void printVar(String nom, int val){
  Serial.print(F(">> "));Serial.print(nom);Serial.print(F(": "));Serial.println(val); 
}

>> myVar: 0
>> myVar: 1
>> myVar: 2
>> myVar: 3
>> myVar: 4
>> myVar: 5
>> myVar: 6
>> myVar: 7
>> myVar: 8
>> myVar: 9
>> myVar: 10

A retenir sur la définition de fonction en C

Bonus

Définition d’argument avec des valeurs par défaut

Il est possible lors de la définition de fonction de définir une valeur par défaut d’un ou plusieurs paramètres. Sous Arduino, pour pouvoir compiler une telle fonction, il vous faudra rajouter le prototype de la fonction (ou la définition entière) avant la première utilisation de la fonction.

Au début du fichier, nous définissons le prototype de la fonction en spécifiant la valeur par défaut.

void printVar(String nom, int val, String unit="");

Puis, à la suite ou à un autre endroit, nous ajoutons la définition de la fonction sans les valeurs par défaut

void printVar(String nom, int val, String unit){
  Serial.print(F(">> "));Serial.print(nom);Serial.print(F(": "));Serial.print(val);
  Serial.print(F(" "));Serial.print(unit);
  Serial.println();
}

Il est ensuite possible d’utiliser la fonction avec ou sans le paramètre afin d’obtenir des comportements différents

   printVar("myVar",myVar);
   printVar("cmVar",cmVar,"cm");

int myVar=0;
int cmVar=0;

void printVar(String nom, int val, String unit="");

void setup(){
  Serial.begin(115200);
}

void loop(){
   printVar("myVar",myVar);
   printVar("cmVar",cmVar,"cm");
   
   myVar+=1;
   cmVar+=5;
   delay(1000);
}

void printVar(String nom, int val, String unit){
  Serial.print(F(">> "));Serial.print(nom);Serial.print(F(": "));Serial.print(val);
  Serial.print(F(" "));Serial.print(unit);
  Serial.println();
}

Surcharge de fonction

Il est possible de définir plusieurs prototype afin qu’une fonction avec un même nom puisse agir sur des paramètres de type différents. Pour surcharger une fonction, il nous faut déclarer la fonction pour chaque liste de paramètre désiré avec des prototype et des corps différents

N.B.: Notez bien que la surcharge de fonction n’est possible qu’avec des liste d’arguments différentes.

int myVar=0;
int cmVar=0;

void printVar(String nom, int val, String unit="");
void printVar(String nom, String mot, String unit="'");

void setup(){
  Serial.begin(115200);
}

void loop(){
   printVar("myVar",myVar);
   printVar("cmVar",cmVar,"cm");
   printVar("cmVar","HelloWorld");
   myVar+=1;
   cmVar+=5;
   delay(1000);
}

void printVar(String nom, int val, String unit){
  Serial.print(F(">> "));Serial.print(nom);Serial.print(F(": "));Serial.print(val);
  Serial.print(F(" "));Serial.print(unit);
  Serial.println();
}

void printVar(String nom, String mot,String unit){
  Serial.print(F(">> "));Serial.print(nom);Serial.print(F(": "));Serial.print(unit);Serial.print(mot);
  Serial.print(unit);
  Serial.println();
}

>> myVar: 3 
>> cmVar: 15 cm
>> Text -> 'HelloWorld'
>> myVar: 4 
>> cmVar: 20 cm
>> Text -> 'HelloWorld'
>> myVar: 5 
>> cmVar: 25 cm
>> Text -> 'HelloWorld'
>> myVar: 6 
>> cmVar: 30 cm
>> Text -> 'HelloWorld'
>> myVar: 7 
>> cmVar: 35 cm
>> Text -> 'HelloWorld'

Sources

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

Quitter la version mobile