Files
programmationc/fonctions.md

215 lines
3.5 KiB
Markdown
Raw Permalink Normal View History

2026-01-06 07:36:50 +01:00
# 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 dune 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 dentrée dun 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 sest terminé correctement
---
## Déclaration et définition dune 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 lexistence de la fonction.
```c
int carre(int x);
```
Elle est généralement placée :
* en haut du fichier
* ou dans un fichier den-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 lappel à 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
Lorsquune 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 nest 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 quaucune valeur nest retournée.
```c
void dire_bonjour(void)
{
printf("Bonjour\n");
}
```
---
## 8. La directive `return`
* Termine **immédiatement** lexé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"