« Langage C/Introduction au C » : différence entre les versions

Contenu supprimé Contenu ajouté
Balise : Blanchiments
Ligne 136 :
 
Dans ce cours, il y aura plusieurs exercices dans lesquels un algorithme fourni devra être implémenté (traduit) en C. Si vous voulez vous entrainer davantage tout en suivant ce cours, je vous conseille [http://www.france-ioi.org/ France-IOI] qui permet d'implémenter divers algorithmes en plusieurs langages dont le C. Cela pourra être un excellent complément.
 
 
 
 
 
== Introduction ==
Le C est un langage impératif, modulaire et structuré, non orienté objet.
 
Le langage C peut être qualifié de bas niveau ou peu typé dans le sens où le langage manipule les mêmes sortes d'objets que la plupart des ordinateurs : des mots machine (pouvant contenir une donnée interprétée comme un nombre, un caractère ou une adresse). Le langage ne propose aucune opération qui traite directement des objets de plus haut niveau (fichier, chaîne de caractères, liste…) et il faut donc faire appel à des fonctions de la bibliothèque standard pour manipuler ce type d'objet.
 
Le langage C a été utilisé pour rendre le système d'exploitation UNIX plus portable. Il a conservé de cela une très grande efficacité pour tout ce qui concerne le développement système. Ainsi la majorité des grands systèmes d'exploitation entre les années 1975 et 1993 ont été développés en C.
 
De même, le langage ne propose pas en standard la gestion de la programmation orientée objet, ni de mécanisme d'exception, ou de traitement multitâche. Il existe des fonctions standards pour gérer les entrées-sorties et les chaînes de caractères, mais contrairement à d'autres langages, aucun opérateur spécifique pour améliorer l'ergonomie. Ceci rend aisé le remplacement des fonctions standards par des fonctions spécifiquement conçues pour un programme donné. En autorisant la surcharge des opérateurs, C++ permet de mélanger la souplesse de C à l'ergonomie des opérateurs spécifiques.
 
Ces caractéristiques en font néanmoins un langage à privilégier quand on cherche à maîtriser les ressources utilisées, le code assembleur généré par les compilateurs étant relativement prévisible et parfois même optimal sur les machines d'architecture RISC à grand nombre de registres.
 
Ce langage est donc extrêmement utilisé dans des domaines comme la programmation embarquée sur microcontrôleurs, les calculs intensifs, l'écriture de systèmes d'exploitation et tous les modules où la rapidité de traitement est importante. Il est en effet une bonne alternative aux langages assembleurs dans ces domaines avec les avantages d'une syntaxe plus lisible et de la portabilité du code.
 
En contrepartie, la mise au point de programmes en C, surtout s'ils utilisent des structures de données complexes, est plus difficile qu'avec des langages de plus haut niveau. En effet, dans un souci de performance le langage C impose à l'utilisateur de programmer certains traitements (libération de la mémoire, vérification de la validité des index sur les tableaux…) qui sont pris en charge automatiquement par les langages de haut niveau.
 
Le C étant un langage simple, son compilateur l'est également. Cela se ressent au niveau du temps de développement d'un compilateur C pour un nouveau microprocesseur qui, selon Kernighan et Ritchie, peut être développé en deux mois. C'est pour cela qu'il est souvent choisi comme premier langage sur une nouvelle architecture. Le compilateur C de la collection de compilateurs GNU (ou GCC) est d'ailleurs écrit en C : seule la partie de génération de code est à modifier quand on porte le compilateur sur une autre machine, par compilation croisée.
 
Beaucoup de limitations du langage C ont été levées dans le langage C++ qui est, à l'origine, C enrichi de la notion d'objet.
 
Beaucoup d'autres langages de programmation ont adopté une syntaxe (notation) ressemblant à celle du langage C, notamment C++, C#, Java, JavaScript, ou PHP.
 
== Histoire ==
[[Fichier:Medal lg.jpeg|thumb|right|250px|[[w:Kenneth Thompson|Ken Thompson]] (à gauche) et [[w:Dennis Ritchie|Dennis Ritchie]] (au centre) recevant la National Medal of Technology du président des États-Unis [[w:Bill Clinton|Bill Clinton]]]]
Le langage C est apparu au cours de l'année 1972 dans les Laboratoires Bell. Il était développé en même temps qu'[[w:UNIX|UNIX]] par [[w:Dennis Ritchie|Dennis Ritchie]] et [[w:Kenneth Thompson|Ken Thompson]]. Ken Thompson avait développé un prédécesseur de C, le langage B.
 
Dennis Ritchie a fait évoluer le langage B dans une nouvelle version suffisamment différente pour qu'elle soit appelée C. Par la suite, [[w:Brian Kernighan|Brian Kernighan]] aida à populariser le langage. Il procéda aussi à quelques modifications de dernière minute. En 1978, il fut notamment le principal auteur du livre ''The C Programming Langage'' décrivant le langage enfin fixé ; Ritchie s'était occupé des appendices et des exemples avec UNIX. On parle encore de ''' C K&R''', '''''K&R C''''' en anglais (pour ''Kernighan and Ritchie C''), lorsqu'on se réfère au langage tel qu'il existait à cette époque.
 
En 1989 et 1990, le langage a été standardisé par l'[[w:American National Standards Institute|ANSI]] et l'[[w:Organisation internationale de normalisation|ISO]]. De nombreuses fonctionnalités sont apportées par la norme C99 (ISO/CEI 9899:1999)<ref>Les nouveautés du C99 par Nicolas Joseph [http://nicolasj.developpez.com/articles/c99]</ref>.
 
== Compilateur ==
 
Le compilateur est un programme pour transformer vos fichiers sources .c et .h en fichier exécutable.
 
Comme le C++ est presque un sur-ensemble du C, il n'y a que très peu de programmes C qui ne sont pas des programmes C++, et les incompatibilités<ref>{{en}} [[:en:w:Compatibility_of_C_and_C++|Problèmes de compatibilité entre le C et le C++]]</ref> sont mineures. Ainsi, on peut compiler du C avec un compilateur C++.
 
Pour compiler puis exécuter les scripts de ce cours, il suffit d'installer [http://www.bloodshed.net/download.html Dev-C++].
 
== Voir aussi ==