# Chapitre 0 — Introduction au langage C ## [0.1][0_1] Présentation du langage C Le langage C est un langage de programmation bas niveau. Cela signifie qu’il est proche du fonctionnement réel de la machine. Concrètement, un programme C manipule directement la mémoire. Chaque variable correspond à une zone mémoire précise. Le programmeur peut lire et écrire à des adresses mémoire. Cela se fait à l’aide des pointeurs. Le C permet aussi de manipuler les bits. On peut contrôler précisément la représentation des données. Par exemple, un entier est stocké sous forme binaire. Le programmeur peut agir directement sur ces bits. Le C ne masque pas le fonctionnement du processeur. Il expose des concepts proches de l’assembleur. Par exemple : - la pile (stack) - le tas (heap) - les appels de fonctions - la mémoire brute Le C ne fournit pas de protections automatiques. Cela signifie que le langage ne vérifie pas certains comportements dangereux. Par exemple : - accès hors limites d’un tableau - utilisation d’un pointeur invalide - dépassement d’entier - division par zéro Ces situations peuvent provoquer un comportement indéfini. Le programme peut : - planter - produire un résultat incorrect - sembler fonctionner mais être corrompu Le C ne possède pas de ramasse-miettes. Un ramasse-miettes (garbage collector) est un système automatique. Il libère la mémoire qui n’est plus utilisée. Dans certains langages, cette gestion est automatique. En C, elle est manuelle. Lorsque l’on alloue de la mémoire : - avec malloc - ou calloc Il faut la libérer avec free. Sinon : - fuite mémoire - crash - comportement indéfini Le C donne un contrôle total au programmeur. Mais cela demande de la rigueur. --- ### Exemple 1 — Programme minimal ```c int main(void) { // Point d'entrée du programme return 0; } ``` --- ### Exemple 2 — Affichage simple ```c #include int main(void) { // Affiche un message printf("Bonjour\n"); return 0; } ``` --- ### Exemple 3 — Calcul simple ```c #include int main(void) { int a = 5; int b = 3; int resultat = a + b; printf("Resultat: %d\n", resultat); return 0; } ``` --- ## 0.2 Historique et cas d’usage Le langage C a été créé dans les années 1970. Il a été conçu pour écrire des systèmes d’exploitation. Le système UNIX a été écrit en C. Aujourd’hui, le C est utilisé dans : - systèmes d’exploitation - systèmes embarqués - bibliothèques système - moteurs haute performance --- ## 0.3 Compilation vs interprétation Un programme C est compilé. Cela signifie qu’il est transformé en code machine avant exécution. Étapes : 1. Préprocesseur 2. Compilation 3. Linking --- ## 0.4 Structure générale d’un programme C Un programme C contient : - des fonctions - des variables - des instructions La fonction principale est main. --- ## 0.5 Premier programme ```c #include int main(void) { printf("Hello, world\n"); return 0; } ``` --- ## 0.6 Programme minimal et printf Un programme commence toujours par main. --- ### Exemple 1 ```c int main(void) { return 0; } ``` --- ### Exemple 2 ```c #include int main(void) { printf("Hello, world\n"); return 0; } ``` --- ### Exemple 3 ```c #include int main(void) { int valeur = 42; printf("Valeur = %d\n", valeur); return 0; } ```