Introduction générale
La programmation, c’est quoi ?
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 dit 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 addition, 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 Cest une suite de fonctions dont une qui est le point d’entrée, la fonction main().
Langage compilé
Le C est un langage compilé, en gros le code source où se trouve n’est pas directement un fichier exécutable, il va donc falloir passer votre fichier source dans un programme appelé compilateur qui traduit le code source en code machine pour pouvoir l’exécuter par la suite.
- Traitement par le préprocesseur
Le préprocesseur est la première étape dans la compilation de nombreux langages (commeCetC++). Il permet de préparer le code source à la compilation par le compilateur.- Inclusion des fichiers : Le préprocesseur gère les inclusions (
#include) qui ajoutent le contenu d’autres fichiers en entête. - Macros : Définition des macros avec
#define. - Conditionnels
- …
- Inclusion des fichiers : Le préprocesseur gère les inclusions (
Remarque
Une macro est un motif de substitution de texte permettant généralement de simplifier le code.
#define PI 3.14-
La compilation
La compilation traduit les fichiers générés par le préprocesseur (1) en code assembleur, qui est une suite d’instructions. -
L’assemblage
Transformation du code assembleur en code binaire compréhensible par le processeur. Le fichier produit est appelé fichier objet. -
L’édition de lien
L’édition de lien permet de rassembler les fichiers objets, de gérer les bibliothèques utilisées, …
WARNING
Langage interprété
Suite d’instructions, lues lignes par lignes, ce qui implique que les erreurs sont détectées pendant l’exécution.
Langage compilé
Suite de fonctions dont une principale
mainqui représente le point d’entrée du programme. Les erreurs sont détectées pendant la compilation, on ne peut donc pas exécuter un programme qui n’a pas réussi à compiler.
- La phase de préparation
- Code source
fichier.cC’est le code écrit par le développeur, il contient les instructions, les boucles, les fonctions, … - Préprocesseur
Il remplace les#include,#define,ifdef,ifndef, … par les programmes extérieurs au fichiers qui lui sont associés pour son bon fonctionnement. - Compilateur
Traduit le code C en code assembleur,. - Assembleur
Convertit le code assembleur.sen code objet (c’est un code binaire, non encore exécutable).
- La phase de liaison - LINKING
- Éditeur de lien linker,
ld
Il combine les fichiers objets créés par l’assembleur et ajoute les bibliothèques nécessaireslibcpar exemple. Et il résoud les symboles, comme par exemple quelle fonction correspond àprintf. Puis il produit l’exécutable final. - Les bibliothèques
C’est elles qui contiennent les fonctions systèmes standardprintf,scanf, …
- La phase d’exécution
- Exécution et chargement
Le format du programme final dépend du système d’exploitation et peut donc être lancé. Pour commencer il est chargé en mémoire grâce auloader. - L’environnement d’exécution
C’est là ou est préparé la pile d’exécutionstack, le tasheapet la fonctionmain(). - Le processeur
Lui il exécute les instructions machines en manipulant les registres mémoire et ALU.
Remarque
L’ALU est le circuit électronique qui effectue toutes les opérations arithmétiques (addition, soustraction, multiplication, division, etc.) et logiques (ET, OU, NON, comparaisons…).
On retiendra alors :
Outils nécessaires
Évidemment avant de commencer ce cours, il faut s’assurer d’avoir tous les outils requis pour pouvoir coder, compiler et exécuter du C.
Installer un é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
Remarque
Il faudra s’identifier via votre compte étudiant.
- 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 de GCC
Installation sur Linux/Debian
sudo apt update
sudo apt install build-essentialLe package build-essential comprend gcc, g++, make, …
Installation sur macOS
xcode-select --installEn gros c’est l’installation de Xcode Command Line Tools, qui est un paquet qui inclut gcc.
Installation sur windows
-
Télécharger
MinGWdepuis le lien suivant -
Pendant l’installation, vous devez cocher :
mingw32-gcc-g++mingw32-gcc-objcmingw32-gcc-make
-
Ensuite, il faudra ajouter le chemin
C:\MinGW\binà ta variable d’environnementPATH.
Ajouter un chemin à sa variable d’environnement PATH
-
Appuyez sur
Windows + set 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
PATHet 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 sur votre machine
Vous pouvez ensuite vérifier avec :
gcc --versionCompiler avec GCC
-
Écriture du code source
Fichier avec l’extension.c
Ces fichiers peuvent inclure des header (#includeou des.hfais 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 - Géré par le préprocesseur
-
La compilation
- Le compilateur transforme le code prétraité
.ien code assembleur.s. - Ainsi, chaque fichier
.cdevient un fichier.s.
La commande :
gcc -S nomFichier.i -o nomFichier.s - Le compilateur transforme le code prétraité
-
L’assemblage
L’assembleur transforme les fichiers
.sen code objet.oqui 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
.oet 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 - Il prend les fichiers objets
La compilation directe en une seule ligne
gcc nomFichier.c -o nomExecutable -Wall -WextraLes 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 nomExecutableSuivant
- Cours suivant : 02 - Premiers pas