# 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 fichiers 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 offrant peu de fonctionnalités notamment pour la gestion de la mémoire et les chaînes de caractères ; - Pas de gestion efficace 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)