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.