215 lines
3.5 KiB
Markdown
215 lines
3.5 KiB
Markdown
# 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 <stdio.h>
|
||
|
||
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 <stdio.h>
|
||
|
||
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"
|