# Les fonctions En langage C, une **fonction** est un bloc de code nommé qui réalise une tâche précise. Les fonctions permettent de : * Découper un programme en parties plus simples * Réutiliser du code sans duplication * Rendre le code plus lisible et plus facile à maintenir * Faciliter les tests et le débogage Tout programme C contient au minimum une fonction : `main`. --- ## Structure générale d’une fonction Une fonction en C se compose de : 1. Un **type de retour** 2. Un **nom** 3. Une liste de **paramètres** (éventuellement vide) 4. Un **corps**, délimité par des accolades `{}` ```c type_retour nom_fonction(type1 param1, type2 param2) { instructions; return valeur; } ``` Exemple simple : ```c int addition(int a, int b) { return a + b; } ``` ## La fonction `main` Le point d’entrée d’un programme C est la fonction `main`. Exemple minimal : ```c #include int main(void) { printf("Bonjour le monde !\n"); return 0; } ``` * `int` : type de retour (code de sortie du programme) * `return 0` : indique que le programme s’est terminé correctement --- ## Déclaration et définition d’une fonction ### Définition La **définition** contient le code réel de la fonction. ```c int carre(int x) { return x * x; } ``` ### Déclaration (prototype) La **déclaration** informe le compilateur de l’existence de la fonction. ```c int carre(int x); ``` Elle est généralement placée : * en haut du fichier * ou dans un fichier d’en-tête (`.h`) ### Exemple complet ```c #include int carre(int x); int main(void) { printf("%d\n", carre(4)); return 0; } int carre(int x) { return x * x; } ``` ## Les paramètres et arguments * **Paramètres** : variables définies en entrée de la fonction * **Arguments** : valeurs ou varaibles passées lors de l’appel à la fonction ```c int multiplier(int a, int b) { return a * b; } int resultat = multiplier(3, 5); ``` En C, les paramètres sont passés **par valeur**. ### Passage par valeur Lorsqu’une variable est passée à une fonction, une **copie** est utilisée. ```c void incrementer(int x) { x = x + 1; } int main(void) { int a = 5; incrementer(a); printf("%d\n", a); // affiche 5 } ``` La variable originale n’est pas modifiée. ### Fonctions sans paramètres et/ou sans retour #### Sans paramètre ```c void afficher_message(void) { printf("Bienvenue !\n"); } ``` #### Sans valeur de retour Le type `void` indique qu’aucune valeur n’est retournée. ```c void dire_bonjour(void) { printf("Bonjour\n"); } ``` --- ## 8. La directive `return` * Termine **immédiatement** l’exécution de la fonction * Peut retourner une valeur (sauf pour `void`) ```c int signe(int x) { if (x > 0) return 1; if (x < 0) return -1; return 0; } ``` ## 9. Bonnes pratiques * Donner des noms explicites aux fonctions * Une fonction = une responsabilité * Limiter la taille des fonctions * Déclarer les fonctions avant leur utilisation --- ## Exercices ### Exercice 1 Écrire une fonction `max(int a, int b)` qui retourne le plus grand des deux nombres. ### Exercice 2 Écrire une fonction `est_pair(int n)` qui retourne 1 si le nombre est pair, 0 sinon. ### Exercice 3 Écrire une fonction `afficher_carre(int n)` qui affiche les carrés des nombres de 1 à `n`. --- ## À retenir * Une fonction est un bloc de code réutilisable * `main` est une fonction comme les autres * Les paramètres sont passés par valeur * `void` signifie "aucun"