Introduction

Historique

Le langage C est apparu au début des années 1970. À l'époque, le développement sur les machines informatiques nécessitait l'emploi du langage d'assemblage spécifique à chacune d'elles. Le portage d'un programme, voire d'un système d'exploitation, depuis un modèle de machine vers un autre nécessitait alors une réécriture totale du code. En autorisant l'expression des constructions algorithmiques usuelles (variables, boucles, fonctions...) dans un langage de plus haut niveau (plus facile à lire pour un être humain) qui pouvait être traduit (compilé) dans le langage spécifique à la machine sous-jacente, tout en autorisant l'accès aux ressources de bas niveau de cette machine (les périphériques et la mémoire notamment), le langage C pouvait être considéré comme un langage d'assemblage portable.

Le langage C a été conçu en 1972 par Dennis Richie et Ken Thompson, au laboratoire Bell Labs, en vue de développer un nouveau système d'exploitation, Unix, portable sur différents hardwares. En 1978, Brian Kernigham et Dennis Richie publient une première définition du langage, The Programming Language, connue sous le nom C K&R ou C classique. Vu l'intérêt suscité par le langage, il est adapté par de nombreux développeurs et une standardisation s'avère nécessaire. L'American National Standards Institute (ANSI) débute les travaux en 1983. Ils déboucheront en 1988 sur une nouvelle norme, le standard ANSI C. En 1990, l'ISO adopte telle quelle cette norme (C90). D'autres évolutions du langage ont suivi et ont été normalisées par l'ISO: C99 en 1999, C11 en 2011 et C17 en 2017, dernière version, qui est celle que nous utiliserons pour ce cours.

Avantages

Le langage C reste un langage des plus utilisés, vu ses très nombreux avantages dont les principaux sont :

Inconvénients

Tous ces avantages impliquent certains inconvénients auxquels les programmeurs devront faire particulièrement attention:

Premier programme

Voici un premier programme qui affiche un message de bienvenue sur la sortie standard stdout.

				#include <stdlib.h>
			    #include <stdio.h>
			    
				int main () {
				    printf("Hello world\n");
				    exit(0);
				}
			

Dans cet exemple,

Avant d'exécuter notre application, nous devons compiler la source, c-à-d la traduire en langage machine. La commande pour y arriver est la commande cc (pour C Compiler).

				cc pgm1.c 
			

pgm1.c est le nom du fichier source. Cette commande, si il n'y a aucune erreur, va générer un programme exécutable, appelé par défaut a.out. Avec l'option -o, nous pouvons spécifier un autre nom pour notre exécutable:

				cc -o pgm1 pgm1.c
			

Le compilateur cc

Le compilateur utilisé durant ce cours est le compilateur cc (C Compiler) d'Ubuntu, qui correspond en réalité à un lien symbolique vers gcc (GNU Compiler Collection). gcc est une suite de logiciels libres de compilation qui gère à la fois le langage C et ses dérivés mais aussi le Java ou encore le Fortran. Afin de limiter cette suite logicielle, nous fixons différentes options de compilation:

Pour plus d'informations sur les différentes options du compilateur, n'hésitez pas à consulter le manuel en tapant 'man gcc' dans un terminal.

Le manuel man

Pour rappel, la commande man (manual) permet d’accéder à la documentation Unix-Linux (entrez la commande man man pour plus d'informations). À l'origine, elle servait à accéder aux manuels des commandes d'un shell Unix et à la description des fonctions du langage C. Elle s'est étoffée depuis.

Les pages du manuel sont divisées en plusieurs sections. On retrouve notamment les sections suivantes :

La section qui nous intéresse dans le cadre de ce cours est bien sûr la 3ième (exéutez la commande man 3 intro pour avoir un descriptif de cette section). Toutes les fonctions de la bibliothèque standard de C (libc) y sont décrites. Par exemple, la commande:

				man 3 scanf
			
affiche la page de manuel de la fonction C scanf. Cette page fournit notamment : la signature de la fonction, la librairie C où elle est définie, une description de ce qu'elle fait et de son mode d'utilisation, le résultat renvoyé et les erreurs qu'elle peut occasionner.

Références

Outre ce syllabus, il vous est proposé de consulter d'autres livres et sites proposant une présentation du langage :

Voici des sites proposant des exercices accompagnés de leurs solutions:

Pour terminer, un compilateur en ligne.




Remerciement

Je tiens à remercier Anthony Verriest pour la mise en forme de ce syllabus qui rend sa consultation bien plus agréable.