Qu’est-ce que le langage C

I. Qu’est-ce que C

Le langage C est un langage de programmation généraliste créé en 1972 pour le système d’exploitation UNIX. Le système lui-même et la plupart de ses logiciels fournis sont écrits en C. Cependant, il n’est pas lié exclusivement à UNIX et fonctionne sur n’importe quel ordinateur ou système. Souvent désigné comme un « langage de programmation système », il permet de concevoir des systèmes d’exploitation et des compilateurs, mais aussi tous types de logiciels classiques.

Le C tire son origine du langage B (dérivé de BCPL). B et BCPL sont des langages sans typage, tandis que le C intègre un système complet de types de données.

II. Caractéristiques principales

1) Une riche palette de types de données

Comparé à son prédécesseur B, le C propose une grande variété de types de données.

Types de base : caractères, entiers de différentes tailles, nombres à virgule flottante (décimaux)

Types dérivés : pointeurs, tableaux, structures et unions. Les pointeurs autorisent la manipulation directe des adresses mémoire, indépendamment de l’architecture matérielle.

Règles : Les opérateurs se combinent pour former des expressions ; toute expression telle qu’une affectation ou un appel de fonction peut constituer une instruction complète à elle seule.

2) Contrôle complet du flux d’exécution du programme

Il prend en charge les branchements conditionnels (if-else), les sélections multiples (switch), deux sortes de boucles (while/for qui vérifient la condition avant exécution, do qui la vérifie après exécution), ainsi que l’interruption anticipée de boucle (break), entre autres. Ces instructions de flux permettent de concevoir des logiques de programme riches et variées.

3) Les fonctions

Une fonction est un ensemble d’étapes opératoires regroupées et nommées. Il suffit d’appeler son nom pour exécuter automatiquement toute la séquence qu’elle contient.

Exemple concret de la vie quotidienne :

Imaginons que « cuire du pain » soit une fonction.

Pas besoin de réécrire chaque étape à chaque fois que vous voulez du pain : pétrir la pâte → former les boules → cuire au four.

Il suffit d’appeler « cuire du pain » pour que toute la procédure s’exécute automatiquement : c’est ce qu’on appelle appeler une fonction.

Si vous voulez cuire du pain deux fois, appelez simplement la fonction « cuire du pain » deux fois.

Transposons ce concept au langage C :

La fonction printf regroupe toute la logique nécessaire pour afficher du texte à l’écran. Il suffit d’écrire printf("Bonjour") sans avoir à gérer manuellement chaque détail de l’affichage écran.

Les fonctions peuvent retourner tous types de données : entiers, structures, pointeurs, etc.

Il supporte l’appel récursif (une fonction qui s’appelle elle-même). Les variables locales à l’intérieur d’une fonction sont recréées à chaque appel ; il est impossible de définir une fonction à l’intérieur d’une autre fonction, mais des variables peuvent être déclarées au sein de blocs de code distincts.

Le code source d’un projet peut être divisé en plusieurs fichiers .c compilés séparément.

Les variables disposent de trois portées : locale à une seule fonction, globale limitée à un unique fichier source, ou visible par l’ensemble du programme.

4) Le préprocesseur

Avant la compilation, le préprocesseur effectue des traitements préliminaires : remplacement de texte par macros en masse, import de fichiers sources externes, compilation conditionnelle de segments de code sélectionnés.

Le préprocesseur gère des commandes qui ne font pas partie de la syntaxe native du C avant la compilation proprement dite. Ces outils complémentaires existent pour simplifier le développement et gagner en efficacité, principalement grâce aux macros. Nous détaillerons cela dans les chapitres suivants.

III. Un langage minimaliste de bas niveau

L’expression « bas niveau » n’a pas de connotation péjorative ici. Le C ne manipule que les primitives natives des ordinateurs : caractères, valeurs numériques et adresses mémoire ; il utilise directement la logique arithmétique intégrée au matériel pour offrir des performances d’exécution exceptionnelles.

Autrement dit, il permet d’interagir avec les composants internes profonds de l’ordinateur. Contrairement à beaucoup d’autres langages, le C donne un accès direct aux adresses mémoire, voire aux périphériques matériels.

Peu de fonctionnalités natives ; les capacités complexes reposent sur les bibliothèques

Le C ne dispose pas nativement de prise en charge des chaînes de caractères, tableaux, collections, entrées/sorties de fichiers ou opérations d’affichage/saisie :

Il est impossible de manipuler une chaîne ou un tableau entier en une seule opération ; seules les structures autorisent la copie intégrale de leur contenu.

Aucun mécanisme de gestion automatique de la mémoire ou de ramasse-miettes n’existe : le développeur doit allouer et libérer la mémoire manuellement.

Aucun mot-clé natif read/write n’est fourni ; l’affichage de texte ou la saisie clavier se gèrent exclusivement par appel à des fonctions de bibliothèque.

Il ne propose que des flux d’exécution mono-thread basiques, sans support natif du multitâche, opérations parallèles, synchronisation ou coroutines.

Une bibliothèque est simplement un ensemble de fonctions préécrites en C ou dans d’autres langages. Les développeurs peuvent appeler ces fonctions toutes faites pour implémenter des fonctionnalités sans devoir recoder des bases depuis zéro.

Même si beaucoup de fonctionnalités nécessitent d’appeler une bibliothèque, le langage lui-même est compact et doté de règles simples, ce qui le rend facile à apprendre et à maîtriser complètement.

IV. Normalisation du C : ANSI C (1988)

La normalisation est devenue indispensable car le C a connu une adoption massive : d’innombrables développeurs et éditeurs ont créé leurs propres variantes du langage, entraînant des syntaxes et comportements incohérents entre les plateformes. Un organisme de normalisation dédié a été créé pour définir des règles universelles et unifiées, à l’instar des normes régissant les ports USB ou les prises électriques murales.

ANSI = American National Standards Institute

Détails

L’American National Standards Institute est un organisme privé de normalisation américain. Il ne produit pas de logiciels ni n’écrit de code source, mais élabore des spécifications uniformes dans tous les secteurs : industrie, électronique, informatique et langages de programmation.

Qu’est-ce que l’ANSI C ?

En 1983, l’ANSI a réuni un comité pour normaliser la syntaxe du langage C. La première spécification officielle du langage, publiée à la fin de l’année 1988, est connue sous le nom d’ANSI C (aussi désignée C89).

V. Complément de la norme ANSI : la bibliothèque standard

La norme a introduit une bibliothèque standard universelle offrant des utilitaires multi-plateformes pour l’accès aux fichiers, les entrées/sorties formatées, l’allocation mémoire, la manipulation de chaînes, etc., accessibles via des fichiers d’en-tête standardisés.

La syntaxe native du C est volontairement minimaliste, ne couvrant que les primitives comme les variables, conditions, boucles, fonctions et pointeurs. Il n’existe aucune fonctionnalité native intégrée pour afficher du texte, lire une saisie clavier, gérer des fichiers, réaliser des calculs mathématiques ou manipuler des chaînes de caractères.

La spécification ANSI C définit un ensemble universel de fonctions utilitaires compatibles avec tous les compilateurs sur tous les systèmes d’exploitation : cet ensemble d’outils s’appelle la bibliothèque standard.

Pour accéder aux fonctions de bibliothèque, les développeurs importent des fichiers d’en-tête grâce à la syntaxe #include nom_fichier.h.

Exemples :

#include <stdio.h> // Bibliothèque d'E/S : printf (affichage texte), scanf (lecture saisie utilisateur)
#include <stdlib.h> // Allocation mémoire, arrêt du programme, génération de nombres aléatoires
#include <string.h> // Copie et comparaison de chaînes de caractères
#include <math.h> // Fonctions mathématiques : sin(), sqrt(), etc.Langage du code : HTML, XML (xml)

Avant la norme ANSI, les fonctions d’affichage fonctionnaient différemment sur UNIX et Windows, provoquant des échecs de compilation lors du portage du code entre systèmes. Depuis l’apparition de la bibliothèque standard, un code tel que printf("bonjour") s’exécute identiquement sur Windows, Linux et macOS sans aucune modification. Cela a considérablement réduit la charge des développeurs et accéléré l’adoption mondiale du C.

Avec quels langages est développée la bibliothèque standard ?

La grande majorité des fonctionnalités de la bibliothèque sont implémentées en C, avec une petite partie reposant sur l’assembleur et d’autres langages bas niveau.

Le C pur gère les fonctions sans interaction directe avec le matériel ou le système d’exploitation, telles que la fonction de copie de chaînes strcpy, les opérations mathématiques ou la copie de blocs mémoire.

Les opérations interagissant directement avec le matériel ou le noyau du système d’exploitation ne peuvent pas être réalisées en C seul ; elles nécessitent des langages complémentaires bas niveau, principalement l’assembleur.

VI. Portabilité et sûreté du typage

Un même code source peut être compilé et exécuté sur différents systèmes d’exploitation avec peu ou aucune modification.

Après avoir lu cette présentation générale, vous devriez avoir une compréhension de base du C. Si certains concepts restent obscurs, ne vous inquiétez pas : des explications uniquement textuelles sont souvent difficiles à assimiler. Nous détaillerons chaque sujet avec des exemples de code pratiques dans les chapitres suivants pour consolider ces notions.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *