|
|
<!DOCTYPE html>
|
|
|
<html>
|
|
|
|
|
|
<head>
|
|
|
<title>Le C</title>
|
|
|
<meta charset="UTF-8">
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
|
<link href="../styles/main.css" rel="stylesheet" type="text/css">
|
|
|
<link href="../styles/article.css" rel="stylesheet" type="text/css">
|
|
|
</head>
|
|
|
|
|
|
<body>
|
|
|
|
|
|
<div class="header">
|
|
|
<div class="title">
|
|
|
<h1>LangProg</h1>
|
|
|
<p><b>Le langage C</b> article</p>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
<nav class="nav-bar">
|
|
|
<span class="nav-left">
|
|
|
<a href="../index.html">Menu Principal</a>
|
|
|
</span>
|
|
|
<span class="nav-right">
|
|
|
<a href="./galerie.html">Galerie</a>
|
|
|
<a href="./donnees.html">Données</a>
|
|
|
</span>
|
|
|
</nav>
|
|
|
|
|
|
<div class="main-content">
|
|
|
|
|
|
<div class="side">
|
|
|
<div class="links">
|
|
|
<h3>Liens externes..</h3>
|
|
|
|
|
|
<ul>
|
|
|
<li><a href="https://fr.wikipedia.org/wiki/C_(langage)">C (Wiki)</a></li>
|
|
|
<li><a href="https://fr.wikipedia.org/wiki/C%2B%2B">C++ (Wiki)</a></li>
|
|
|
<li><a href="https://fr.wikipedia.org/wiki/C_sharp">C# (Wiki)</a></li>
|
|
|
</ul>
|
|
|
</div>
|
|
|
|
|
|
<section class="majs">
|
|
|
<h2>actualités du site</h2>
|
|
|
|
|
|
<div>
|
|
|
<article>
|
|
|
<h4>initialisation du site</h4>
|
|
|
<p>08/09/2022: création de la page d'acceuil, des 3 premiers articles,
|
|
|
et de la table.</p>
|
|
|
</article>
|
|
|
|
|
|
<article>
|
|
|
<h4>ajouts des stylesheets</h4>
|
|
|
<p>15/09/2022: ajouts de styles.css.</p>
|
|
|
</article>
|
|
|
|
|
|
<article>
|
|
|
<h4>maj complete de la structuration du site</h4>
|
|
|
<p>29/09/2022: création de multiple fichiers de styles adaptive,
|
|
|
arrangement du code pour une meilleur lisibilité.</p>
|
|
|
</article>
|
|
|
|
|
|
<article>
|
|
|
<h4>maj du style 1</h4>
|
|
|
<p>05/10/2022: mise à niveau du style: style pour les pages d'article,
|
|
|
de donnée, création de la page de gallerie avec des photos et des
|
|
|
vidéos, nouvelles bordures, overflow, position (stiky).</p>
|
|
|
</article>
|
|
|
</div>
|
|
|
|
|
|
</section>
|
|
|
</div>
|
|
|
|
|
|
<div class="main">
|
|
|
|
|
|
<section class="articles">
|
|
|
<h2>le language de programmation c</h2>
|
|
|
|
|
|
<article>
|
|
|
<p>c est un langage de programmation <strong>impératif
|
|
|
généraliste</strong>, de bas niveau. inventé au début des années 1970
|
|
|
pour réécrire unix, c est devenu un des langages les plus utilisés,
|
|
|
encore de nos jours. de nombreux langages plus modernes comme c++, c#,
|
|
|
java et php ou javascript ont repris une syntaxe similaire au c et
|
|
|
reprennent en partie sa logique. c offre au développeur une
|
|
|
<strong>marge de contrôle importante</strong> sur la machine
|
|
|
(notamment sur la gestion de la mémoire) et est de ce fait utilisé
|
|
|
pour réaliser les <strong>« fondations »</strong> (compilateurs,
|
|
|
interpréteurs…) de ces langages plus modernes.</p>
|
|
|
</article>
|
|
|
|
|
|
<article>
|
|
|
<h3>histoire</h3>
|
|
|
<p>le langage c a été inventé au cours de l'année 1972 dans les
|
|
|
laboratoires bell. il était développé en même temps qu'unix par
|
|
|
dennis ritchie et kenneth thompson. kenneth thompson avait développé
|
|
|
le prédécesseur direct de c, le langage b, qui est lui-même
|
|
|
largement inspiré de bcpl. dennis ritchie a fait évoluer le langage
|
|
|
b dans une nouvelle version suffisamment différente, en ajoutant
|
|
|
notamment les types, pour qu'elle soit appelée c1.
|
|
|
|
|
|
bien que c soit directement dérivé de b, ritchie relève aussi des influences de
|
|
|
pl/i, fortran et algol 68. en outre, ritchie signale que l'équipe
|
|
|
était convaincue du bien-fondé de l'idée d'écrire un système
|
|
|
d'exploitation dans un langage de plus haut niveau que l'assembleur,
|
|
|
un aspect pionnier de multics, écrit en pl/i.
|
|
|
|
|
|
par la suite, brian kernighan aida à populariser le langage c. il procéda aussi
|
|
|
à quelques modifications de dernière minute. en 1978, kernighan fut
|
|
|
le principal auteur du livre the c programming language décrivant le
|
|
|
langage enfin stabilisé ; ritchie s'était occupé des appendices et
|
|
|
des exemples avec unix. on appelle aussi ce livre « le k&r », et
|
|
|
l'on parle de c traditionnel ou de c k&r lorsqu'on se réfère au
|
|
|
langage tel qu'il existait à cette époque. </p>
|
|
|
</article>
|
|
|
|
|
|
<article>
|
|
|
<h3>qualités et défauts</h3>
|
|
|
<ul>
|
|
|
<h4>principale qualitées</h4>
|
|
|
<li>il existe depuis longtemps, le début des années 1970 ;</li>
|
|
|
<li>il est fondé sur un standard ouvert ;</li>
|
|
|
<li>de nombreux informaticiens le connaissent ;</li>
|
|
|
<li>il permet la minimisation de l'allocation mémoire nécessaire, son contrôle complet et la maximisation de la performance, notamment par l'utilisation de pointeurs ;</li>
|
|
|
<li>il permet la construction de structures de données complexes et ad-hoc, au plus près des besoins ;</li>
|
|
|
<li>des compilateurs et bibliothèques logicielles existent sur la plupart des architectures ;</li>
|
|
|
<li>il a influencé de nombreux langages plus récents dont c++, java, c# et php ; sa syntaxe en particulier est largement reprise ;</li>
|
|
|
<li>il met en œuvre un nombre restreint de concepts, ce qui facilite sa maîtrise et l'écriture de compilateurs simples et rapides ;</li>
|
|
|
<li>il ne spécifie pas rigidement le comportement du fichier exécutable produit, ce qui aide à tirer parti des capacités propres à chaque ordinateur ;</li>
|
|
|
<li>il permet, par la compilation directe vers le langage machine (via l'assembleur), l'écriture de logiciels qui n'ont besoin d'aucun support à l'exécution (ni bibliothèque logicielle ni machine virtuelle), au comportement prévisible en temps d'exécution comme en consommation de mémoire vive, comme des noyaux de système d'exploitation et des logiciels embarqués.</li>
|
|
|
<h4>principaux inconvénients</h4>
|
|
|
<li>le peu de vérifications offertes par les compilateurs d'origine (k&r c), et l'absence de vérifications à l'exécution, ce qui fait que des erreurs qui auraient pu être automatiquement détectées lors du développement ne l’étaient qu’à l'exécution, donc au prix d’un plantage du logiciel ;
|
|
|
<ul>
|
|
|
<li>sous unix, on pouvait utiliser les utilitaires lint et cflow pour éviter de tels mécomptes,</li>
|
|
|
<li>des vérifications sont ajoutées avec le temps, mais elles restent partielles,</li>
|
|
|
</ul>
|
|
|
</li>
|
|
|
<li>son approche de la modularité restée au niveau de ce qui se faisait au début des années 1970, et largement dépassée depuis par d'autres langages :
|
|
|
<ul>
|
|
|
<li>il ne facilite pas la programmation orientée objet,</li>
|
|
|
<li>il ne permet pas de créer des espaces de noms,</li>
|
|
|
</ul>
|
|
|
</li>
|
|
|
<li>la gestion d'exceptions très sommaire ;</li>
|
|
|
<li>le support très limité de la généricité, malgré l’introduction des expressions à type générique en c11 ;</li>
|
|
|
<li>les subtilités de l'écriture de programmes portables, car le comportement exact des exécutables dépend de l'ordinateur cible ;</li>
|
|
|
<li>le support minimaliste de l'allocation de mémoire et des chaînes de caractères, ce qui oblige les programmeurs à s'occuper de détails fastidieux et sources de bugs ; il n'y a notamment pas de ramasse-miettes standard ;</li>
|
|
|
<li>les bugs graves qui peuvent être causés par un simple manque d'attention du développeur ; tel le dépassement de tampon qui constitue une faille de sécurité informatique exploitable par les logiciels malveillants ;</li>
|
|
|
<li>certaines erreurs ne peuvent être détectées automatiquement qu'à l'aide d'outils supplémentaires et non standardisés, comme lint et valgrind ;</li>
|
|
|
<li>la faible productivité du langage par rapport aux langages plus récents[réf. souhaitée].</li>
|
|
|
</ul>
|
|
|
</article>
|
|
|
|
|
|
</section>
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</body>
|
|
|
</html>
|