Cours 01 - Introduction

Table des matières

Introduction générale

La programmation, c'est quoi déjà ?

La programmation est un concept fondamental en informatique puisqu’elle représente l’art et la science de créer des programmes qui définissent à l’ordinateur ce qu’il doit faire. On peut le voir comme une liste de tâches (= instructions) codées dans un langage de programmation que l’ordinateur est capable de comprendre et d’exécuter.

Définition

On appelle langage de programmation un langage informatique permettant d'écrire des algorithmes et de produire des programmes informatiques.

La programmation permet de créer toutes sortes d’applications, des simples scripts aux systèmes complexes comme les sites web, les jeux vidéo, les applications mobiles et les logiciels d’entreprise.

Ainsi, un programme est une suite d’instructions ordonnées données à l’ordinateur pour qu’il exécute des tâches. Par exemple des opérations comme l'addition, la soustraction.

Parlons langage C

Historique

Le langage C est un langage de programmation impératif inventé dans les années 1970 par Dennis Ritchie. Ce dernier a pour but de réécrire le langage Unix. Le langage C est basé sur le langage B de Ken Thomson (langage intermédiaire plus simple que l’assembleur).

Le C est une suite de fonctions dont une qui est le point d’entrée, la fonction main().

int main(){
  // Code de la fonction
  return 0;
}


Langage compilé

Le C est un langage compilé, en gros ça veut dire que le code source n'est pas directement un fichier exécutable, il faut alors passer le fichier source dans un programme appelé compilateur qui traduit le code source en code machine pour pouvoir l'exécuter par la suite.

Zoom sur la compilation

Écriture du code source

  • Fichiers concernés : .c pour le code source, .h pour les en-têtes (headers).
  • À ce moment, le code est lisible par l’homme, mais l’ordinateur ne peut pas encore l’exécuter.

Exemple : main.c

#include <stdio.h>

int main() {
    printf("Bonjour le monde!\n");
    return 0;
}

Prétraitement

  • Commande : gcc -E main.c -o main.i
  • Rôle :
  • Traiter les directives #include, #define, #ifdef
  • Remplacer les macros.

Générer un fichier intermédiaire prêt pour la compilation : .i ou .ii.

Exemple après prétraitement :

/*
 * Contenu de stdio.h inséré ici
 */

int main() {
    printf("Bonjour le monde!\n");
    return 0;
}

La compilation

  • Commande : gcc -S main.i -o main.s
  • Rôle :
  • Traduire le code C en assembleur spécifique à l’architecture (x86, ARM, etc.).
  • Vérification syntaxique et sémantique.
  • Détection d’erreurs de compilation (ex. types incompatibles, variables non déclarées).

Résultat : un fichier .s contenant le code assembleur.

Assemblage

  • Commande : gcc -c main.s -o main.o
  • Rôle :
  • Convertir le code assembleur en code machine binaire.
  • Générer un fichier objet .o.
  • Contenu : instructions machines (0 et 1) que le CPU peut comprendre directement.

Chaque fichier source devient alors un fichier objet correspondant.

Édition de liens - Linking

  • Commande : gcc main.o -o main
  • Rôle :
  • Combiner tous les fichiers objets (.o) et les bibliothèques nécessaires (libc, etc.) en un exécutable.
  • Résoudre les symboles externes, par exemple :
  • L’appel à printf sera lié à la bibliothèque standard C.

Résultat : fichier exécutable (main sur Linux, main.exe sur Windows).

Exécution du code

  • Commande : ./main (Linux/macOS) ou main.exe (Windows)
  • Le système charge l’exécutable en mémoire et le CPU exécute les instructions machine.

En résumé

main.c -- (préorocesseur) --> main.i
main.i -- (compilateur) --> main.s
main.s -- (assembleur) --> main.o
main.o -- (linker) --> [executable]
Processus de compilation et d'exécution en C De l'écriture du code source à l'exécution par le processeur PHASE DE PRÉPARATION Code source fichier.c Langage C lisible Préprocesseur cpp → fichier.i #include, #define, #ifdef Compilateur gcc -S → fichier.s Code assembleur Assembleur as → fichier.o Code machine (objet) PHASE DE LIAISON Éditeur de liens (Linker) ld → exécutable final Résolution des symboles, liaison des bibliothèques Bibliothèques libc.a, libm.a Fonctions système PHASE D'EXÉCUTION Exécutable a.out / programme Format ELF/PE/Mach-O Chargeur (Loader) Allocation mémoire Résolution dynamique Environnement d'exécution main(), pile, tas Processeur Instructions machine Registres, ALU Commandes GCC : gcc -E file.c (préprocesseur) • gcc -S file.c (compilation) • gcc -c file.c (assemblage) • gcc file.o -o prog (liaison)


Outils nécessaires

Avant de commencer ce cours de programmation C, vous devez vous assurer d'avoir tous les outils requis pour pouvoir coder et exécuter du code en C.

L'éditeur de code

La première chose à faire est de choisir son éditeur de code, ici seul des éditeurs gratuits sont proposés.

Visual Studio Code - VS CODE

Lien pour le téléchargement : https://code.visualstudio.com

  • Disponible sur Linux, OS et Windows
  • Léger et rapide
  • Possède des extensions puissantes par exemple, C/C++ de Microsoft
  • Intégration git, débogueur, terminal intégré
  • … Par contre, VS CODE nécessite quelques réglages au début.

CLion - JetBrain (gratuit pour les étudiants)

Lien pour le téléchargement : https://www.jetbrains.com/edu-products/download/#section=idea

  • Disponible sur OS, Linux et Windows
  • Puissant et complet
  • Débogueur et outils intégré
  • Idéal pour les projets

Compiler son programme C

Installation GCC - Linux/Debian

sudo apt update
sudo apt install build-essential

Le package build-essential comprend gccg++make, …

Installation GCC - macOS

xcode-select --install

En gros c’est l’installation de Xcode Command Line Tools, qui est un paquet qui inclut gcc.

Installation GCC - Windows

  • Télécharger MinGW depuis le lien suivant : https://sourceforge.net/projects/mingw/
  • Pendant l’installation, vous devez cocher :
  • mingw32-gcc-g++, mingw32-gcc-objc, mingw32-gcc-make
  • Ensuite, il faudra ajouter le chemin C:\MinGW\bin à ta variable d’environnement PATH.
  • Appuyez sur Windows + s et tapez variables d’environnement
  • Cliquez sur Modifier les variables d’environnement système
  • Cliquez sur Variable d’environnement
  • Dans la section Variables système, sélectionner PATH et cliquez sur Modifier
  • Cliquez sur Nouveau et ajoutez : C:\MinGW\bin
  • Cliquez sur OK jusqu’à ce que toutes les fenêtres se ferment
  • Relancer le terminal


Vérifier l'installation de GCC

gcc --version

Compiler avec GCC

Écriture du code source

Fichier avec l’extension .c

Ces fichiers peuvent inclure des header (#include ou des .h fais soi-même)


Le préprocessing

  • Géré par le préprocesseur cpp
  • Il remplace donc les #include#define
  • Produit un fichier temporaire avec tout le contenu déplié (pas encore du code machine)

La commande :

gcc -E nomFichier.c -o nomFichier.i


La compilation

  • Le compilateur transforme le code pré traité .i en code assembleur .s.
  • Ainsi, chaque fichier .c devient un fichier .s.

La commande :

gcc -S nomFichier.i -o nomFichier.s


L’assemblage

L’assembleur transforme les fichiers .s en code objet .o qui sont des codes binaires, ⚠️ ces codes ne sont pas encore exécutable.

La commande :

gcc -c nomFichier.s -o nomFichier.o


Édition de liens (linking)

  • Il prend les fichiers objets .o et les assemble en 1 fichier exécutable.
  • Production d’un fichier binaire exécutable (par défaut a.out)

La commande :

gcc -c nomFichier.o -o nomExecutable


La compilation directe en une seule ligne

gcc nomFichier.c -o nomExecutable -Wall -Wextra

Les lignes -Wall -Waxtra permettent d’activer certain avertissements lors de la compilation en langage C.

Bon nous on se contentera de la commande : gcc nomFichier.c -o nomExecutable

Retour