Cours pdf historique du langage C, tutoriel & guide de travaux pratiques en pdf.
I – Origines
I-A – Le CPL
I-B – Le BCPL
I-C – Le B
I-D – Le C
II – Évolutions
II-A – 1978 – K&R C
II-B – 1983 – C++
II-C – 1983 – Objective-C
II-D – 1989 – ANSI C
II-E – 1998 – Standard C++
II-F – 1999 – C99
III – Héritage historique
III-A – Pointeurs et tableaux
III-A-1 – Déclaration avec []
III-A-2 – Pointeur et premier élément de tableau
III-A-3 – Opérateur []
III-B – Conversions de type
III-C – int implicite
III-D – Conversions arithmétiques
III-E – Paramètres de fonction
III-E-1 – Déclaration implicite de fonction
III-E-2 – Déclaration de fonction
III-E-3 – Style K&R C de définition de fonction
III-E-4 – Promotion des paramètres
III-E-5 – Prototypes, void, procédure
III-F – Chaînes littérales de caractères
Origines
Le langage C possède trois ancêtres : le CPL, le BCPL et le B.
I-A – Le CPL
Le langage CPL (pour Combined Programming Language) a été conçu au début des années 1960 par les universités de Cambridgeet de Londres. C’était un grand projet académique consistant à créer un langage englobant beaucoup de concepts. Le CPL devait notamment être fortement typé, avec de nombreux types comme des nombres entiers, réels, booléens, caractères, tableaux, listes…
Le CPL était trop complexe pour l’époque et il semble que personne n’ait réussi à terminer l’écriture d’un compilateur.
Ce langage a disparu sans laisser de trace quelque part dans les années 1970.
Réf. : LinuxGuruz, Wikipédia
I-B – Le BCPL
Le langage BCPL (pour Basic CPL) a été conçu à Cambridge en 1966 par Martin Richards. L’année suivante, il alla au MITet écrivit un premier compilateur. Le BCPL est une version fortement simplifiée du langage CPL avec notamment un seul type de donnée, le mot machine, c’est-à-dire le nombre typique de bits que le processeur d’un ordinateur traite en une instruction-machine (addition, soustraction, multiplication, copie…). La notion est devenue un peu floue avec les processeurs actuels qui peuvent traiter des données de toutes sortes de tailles. Cependant, on peut raisonnablement classer les Pentium et PowerPC parmi les processeurs 32 bits, contre 64 bits pour les Alpha, Itanium ou Opteron. Du temps du BCPL, on trouvait des architectures à mots de 40 bits, 36 bits, 18 bits, 16 bits…
Le BCPL opère sur les mots de la machine. Il est donc à la fois portable et proche du matériel, donc efficace pour la programmation système. Le langage BCPL a servi à écrire divers systèmes d’exploitation de l’époque, dont un (TripOS) qui s’est retrouvé partiellement porté sur l’Amiga pour devenir la partie AmigaDOS du système.
I-C – Le B
Le langage B a été créé par Ken Thompsonvers 1970 dans les laboratoires Belld’AT&T. L’année précédente, il avait écrit en assembleur la première version d’UNIXsur un PDP-7contenant 8 kilo mots de 18 bits. Lorsqu’il voulut proposer un langage sur ce nouveau système d’exploitation, il semble qu’il ait d’abord pensé à porter Fortran, mais que très vite (en une semaine) il conçut son propre langage : B.
Le B est une simplification de BCPL, un peu forcée par les limitations du PDP-7. Mais la syntaxe très sobre du B (et des commandes UNIX) toute en lettres minuscules correspond surtout aux goûts de Thompson. Le langage C a repris la syntaxe du B avec un minimum de changements.
Le langage B a été porté et utilisé sur quelques autres systèmes. Mais cette même année 1970, le succès du projet UNIXjustifia l’achat d’un PDP-11. Celui-ci avait des mots machine de 16 bits, mais il était aussi capable de traiter des octets (24 ko de mémoire vive en tout) dans chacun desquels pouvait être stocké un caractère. Le B ne traitait que des mots machine, donc le passage de 18 à 16 bits n’était pas problématique, mais il était impossible de traiter efficacement les caractères de 8 bits. Pour bien exploiter les capacités de la machine, le B a donc commencé à être étendu en ajoutant un type pour les caractères…
I-D – Le C
Le langage C a été développé par un collègue de Ken Thompson, Dennis Ritchiequi pensait d’abord faire uniquement un New B ou NB. Mais en plus des caractères, Ritchie ajouta les tableaux, les pointeurs, les nombres à virgule flottante, les structures… 1972 fut l’année de développement la plus productive et sans doute l’année de baptême de C. En 1973, le langage C fut suffisamment au point pour que 90 % d’UNIXpuisse être récrit avec.
En 1974, les laboratoires Bellont accordé des licences UNIXaux universités et c’est ainsi que le langage C a commencé à être distribué.
Références : The Development of the C Language, Very early C compilers and language
Exemple de code C identique aux codes BCPL et B ci-dessus (tiré de Clive Feather on CPL and BCPL) :
floatinfact (n) intn;
{
floatf = 1;
inti;
extern floatfact[];
for(i = 0; i <=n; ++i)
fact[i] =f *=i;
returnd;
}
#defineTOPFACT 10
floatfact[TOPFACT+1];
…….
Historique du langage C (353 KO) (Cours PDF)