# Langage C

> [!NOTE]
> Le langage C reste aujourd'hui très utilisé, notamment pour le développement du noyau des systèmes d'exploitation (kernel), des logiciels embarqués et des applications nécessitant des **performances élevées**. Sa simplicité, sa proximité avec le matériel et sa portabilité sont les principales raisons de son succès durable.

- [Histoire du langage C](histoire.md)

## Caractéristiques

- Langage de programmation **procédural** ;
- Langage de **bas niveau** : conçu pour être compilé en un nombre d'instructions machine **prévisible** en termes d'occupation mémoire et de charges de calcul ;
- Langage extrêmement utilisé dans :
  - La programmation embarquée sur micro-contrôleurs ;
  - Les calculs intensifs ;
  - L'écriture du noyau de systèmes d'exploitation ;
  - Les modules où la rapidité de traitement est importante.

Sa syntaxe de base a inspiré de nombreux langages plus récents dont C++, Java et PHP, C#, JavaScript, ...

### Avantages

- Nombre restreint de concepts, ce qui facilite sa maîtrise ;
- Nombre restreint de mots clés, ce qui facilite l'apprentissage ;
- Proche de la machine : opérateurs proches du langage machines et fonctions permettant un accès direct au système ;
- Programmation modulaire : permet de gérer plusieurs ﬁchiers sources ⇒ structuration, compréhensibilité et réutilisation du code ;
- Grand nombre de **bibliothèques tierces** existantes.

### Inconvénients

- Pas universel car la génération des exécutables dépend du compilateur et donc de la cible ;
- Langage bas niveau oﬀrant peu de fonctionnalités notamment pour la gestion de la mémoire et les chaînes de caractères ;
- Pas de gestion eﬃcace des erreurs et beaucoup de libertés laissées au programmeur ⇒ rigueur et discipline de programmation ;
- Bibliothèque standard assez pauvre.

En GEII, une grande partie des applications concerne :

- des microcontrôleurs (Arduino, STM32, PIC, AVR…) aux ressources limités (mémoire, CPU, énergie)
- des automates et systèmes **temps réel**,

Le C est le langage natif de ces environnements.

- Très proche du matériel
- Pas de machine virtuelle
- Exécutable compact et rapide
- Contrôle précis de la mémoire et prédictif du temps d’exécution

Dans l’industrie, le C est encore majoritaire pour le firmware.

## Concepts

- [Anatomie d'un programme](anatomie.md)
- [La compilation](compilation.md)
- [Les variables](variables.md)
- [Les fonctions](fonctions.md)

### Opérateurs

- [Opérateurs d'affectation](opérateurs/affectation.md)
- [Opérateurs arithmétiques](opérateurs/arithmétiques.md)
- [Opérateurs logiques](opérateurs/logique.md)
- [Opérateurs relationnels](opérateurs/comparaison.md)
- [Opérateurs bit à bit](opérateurs/bit.md)
- [Priorité des opérations](opérateurs/priorite.md)

### Les instructions

- [Instructions conditionnelles](instructions/conditions.md)
- [Instructions de boucles](instructions/boucles.md)
- [Instructions de débranchement](instructions/debranchement.md)


## Travaux pratiques

- [Maquette](maquette.md)
- [Estampilleuse](maquette18.md)
- [Pompes](maquette2.md)
- [Monte charge](maquette42.md)
- [Pompes](maquette43.md)
