Title: L
1L histoire
En 1976, Bell Labs abandonne le projet MULTICS.
Ken Thompson, programmeur système chez Bell Labs,
se trouve désoeuvré. MULTICS devait être un
nouveau système dexploitation multi-tâches et
multi-utilisateurs utilisable pour la commande de
systèmes de télécommunications (entre autres, des
centraux téléphoniques, et des noeuds de réseau
de données ARPAnet), mais le projet est abandonné
parce que trop coûteux, et que les perspectives
sur la base matérielle utilisée sont trop
restreintes à cette époque, le mini-ordinateur
le plus performant était le PDP-8 de Digital
Equipment Corporation. Pour soccuper, Ken
Thompson décide de programmer des jeux sur le
PDP-8, et comme il ne dispose pas dun système
dexploitation qui le satisfasse, il commence
par développer un système dexploitation. Ce sera
la première version de UNIX, écrite entièrement
en assembleur.
2En même temps
Quasi parallèlement, un autre programmeur de
Bell Labs, Dennis Ritchie utilise le Langage BCPL
(développé en Grande Bretagne, dans une
université), mais le trouve inadapté à ses
besoins. Il va récrire un langage sur la base de
BCPL, et lappellera B (vraisemblablement la
première lettre de BCPL). B ne sortira jamais
officiellement des tiroirs de Dennis
Ritchie. Aidé par Brian Kernighan, B va
connaître un nouveau développement. Le
nouveau Langage ainsi crée se nommera C.
Difficile de dire à priori si C représente la
lettre venant après B dans lalphabet, ou la
deuxième lettre de BCPL. Dennis Ritchie parvient
à persuader Ken Thompson de récrire UNIX sur une
machine plus performante, un PDP 11. Pour ce
faire, au lieu dutiliser lassembleur, on va
utiliser le langage de Ritchie, C. Cette décision
est à considéré comme un des plus
importants tournants de lhistoire de
linformatique pour la première fois, on va
créer un système dexploitation écrit dans un
langage indépendant de la machine cible pour la
première fois, on va développer un système
dexploitation portable au niveau source. Cette
grande première va faire le succès de UNIX, et
par corollaire, le succès de C.
3Et là
ATT reprendra progressivement le développement
de UNIX, en fournissant des Licences source à bas
prix, comprenant le compilateur KernighanRitchie
(ou KR) à tous les utilisateurs potentiels.
Petit à petit, UNIX simposera comme le must
des systèmes dexploitation à lusage des
scientifiques et des universités. UNIX étant
écrit en C, la moindre intervention sur UNIX
demande au moins une Connaissance embryonnaire de
C. Le compilateur C étant gratuit, le langage
devient populaire en même temps que UNIX, malgré
une syntaxe cryptique, et des déboguages particuli
èrement ardus dans la jungle des pointeurs
imposée par le langage. Ses qualités pour la
programmation système, et le code très performant
que génèrent les compilateurs en font bientôt une
alternative intéressante également pour
les scientifiques, las de FORTRAN.
4Bjarne
A cette époque, Bjarne Stroustrup définit le
successeur de C. Plutôt que D ou P (soit la suite
de C dans lalphabet, ou la suite de C dans
BCPL), Stroustrup baptise son bébé C (le
premier nom donné à ce nouveau langage était C
with classes.), entendant par là que C est a
better C, un C meilleur, incrémenté. Dans
l'idée de Stroustrup, C devait conserver les
idées de base ayant conduit à la réalisation de C
(typage statique, efficacité d'exécution, langage
compilé). Il est intéressant de constater que
UNIX, C et C sont tous des bricolages de labo.
En ce sens, ces trois produits sont à lopposé de
produits comme CHILL ou ADA, ayant fait lobjet
dune spécification très poussée. un langage,
aussi bon ou aussi mauvais soit-il, na jamais
fait la qualité ni le succès dun programme,
comme le démontre nombre de réussites et déchec
industriels.
5Avantages du language
Ironiquement, les principaux (surcharge
d'opérateurs, classes) de C sont
des caractéristiques introduites dans des
langages antérieurs à C lui-même, qui est
à l'origine de C (Algol-68, Simula-67). on
peut se fonder actuellement sur des bibliothèques
de logiciels très vastes (communications,
protocoles, fenêtrages, algorithmique, traitement
dimages, etc...) offrant des interfaces écrits
dans un même langage. Et beaucoup plus que le
langage de programmation utilisé, cest le code
déjà écrit et testé qui permet doptimiser les
coûts de production de grands logiciels. Le
meilleur langage est celui que lon connaît, le
meilleur code, - et le plus rapidement
disponible- celui qui tourne déjà sans erreurs.
Sur la base de ces hypothèses, C apparaît comme
un langage très puissant, connu par beaucoup de
programmeurs dans le monde, et soutenu par une
masse de code existant et disponible probablement
à nulle autre pareille.
6Commence par C
include ltstdio.hgt / my first C program / int
main() printf("Hello World\n") return 0
Libraries incluses
Déclaration de fonction (retour typé)
Output
Retour du résultat
7La fonction main()
int main()
- 7 fonction est essentielle en C/C. Elle figure
dans tous les programmes et ne peut apparaitre
qu1 fois (comparer à java). - Le mot clé main() peut figurer nimporte où dans
le(s) fichier(s) source(s). Il définit les
limites du programme. - Tout programme C sarrête lorsque toutes les
instructions de la fonction principale ont été
traitées (ou lorsque le programme crash). - Ici main renvoie une valeur de type entière.
8Identificateurs de variables/fonctions
- Ne commencent pas par 1 chiffre
- Ne commencent pas par 1 astérisque
- Ne commencent pas par 1 signe arithmétique
- Ne commencent pas par 1 point
- Ne contiennent pas de trait dunion
- Ne contiennent pas dapostrophes
9Déclarations de variables
- int a, b 2
- char x, y 'a'
- unsigned long int i1 0, i2 3
- double pi 3.14 double d 5pi
ICI, FAIRE ATTENTION
10Types
- char un octet (caractère)
- int entier signé
- float nombre à virgule flottante. Précision 6
chiffres après la virgules. - double nombre à virgule flottante. Précision 10
chiffres après la virgules.
- Examples char (signed char), unsigned char,
short int (signed short int), unsigned short int,
int (signed int), unsigned int, long int (signed
long int), unsigned long int, float, double, long
double
- short, long
- signed, unsigned
11Types de données(int)
- int
- (par défault signed short)
- short 2 octets (16 bits)
- signed -32768 à 32767
- unsigned 0 à 65535
- long 4 octets (32 bit)
- signed -2147483648 à 2147483647
- unsigned 0 à 4294967295
- 12 014 0xC
- 2568 05010 0xa08
- 2L
En principe, on peut dire que sizeof(short) lt
sizeof(int) lt sizeof(long) Ainsi sur certaines
architectures on peut avoirshort 2 octets,
int 2 octets, long 4 octets et sur d'autre
short 2 octets, int 4 octets, long 4 octets
12Types de données(char)
- '\a' keyboard bell
- '\\' back slash
- '\b' back space
- '\?' question mark
- '\f' form feed
- '\n' new line
- '\"' double quote
- '\r' carriage return
- '\t' horizontal tab
- '\v' vertical tab
- '\ooo' octal byte
- '\xhh' hex byte
- '\0' null byte
- char
- (par défault signed)
- signed -128 à 127
- unsigned 0 à 255
13Types de données (chaines de caractères )
Il n'existe pas de type spécial chaîne ou string
en C. Une chaîne de caractères est traitée comme
un tableau à une dimension de caractères (vecteur
de caractères). Il existe quand même des
notations particulières et une bonne quantité de
fonctions spéciales pour le traitement de
tableaux de caractères.
char ltNomVariablegt ltLongueurgt Exemples char
NOM 20 char PRENOM 20 char PHRASE 300
- "a\tb" --gt a b
- "abcd\b\bx" --gt abx
- "\"hello world\"" --gt "hello world"
- "I don\'t know" --gt I don't know
- "hello\nworld" --gt hello world
- "\a" --gt (rings the keyboard bell)
- La représentation interne d'une chaîne de
caractères est terminée par le symbole '\0'
(NULL). - Ainsi, pour un texte de n caractères, nous
devons prévoir n1 octets.
14Structures du language
Très similaire à Java
15Branchement
- if (...) stmt
- if (...) stmt else stmt
- if (...) body else body
if (1) ... true if (2) ... true if
(-1.5) ... true if (0) ... false int x 2,
y if (x lt 3) y 5 else y 4
Opérateur ternaire cond ? e1 e2
----------------------------------- double x n
2 0 ? 4.3 -2.3
16Branchement()
int x 0, y 0 switch(n) case 1 case
2 x 2 case 3 y 3 break case
4 x 1 y 4 case 5 x 2
break default y -1
n x y 1 2 3 2 2 3 3 0 3 4 2 4 5 2
0
17Structures de répétition
Il y a 3 structures de répétition
for(e1e2e3) ... int f1, i for(i2 iltn
i) f f i for() ...
while(cond) ... int f1, i2 while(i lt n) f
f i
do body while(cond) int f1, i 1 do f
f i while(i lt n)
18répétition()
goto(rare) void f() ... for( ... )
while( ... ) ... if (wrong) goto error
... for( ... ) if (wrong) goto
error ... ... error ...
break continue int i, r 0 for(i0 iltn
i) if (r 2 0) continue r i
int choice 0 while(1) choice
user_input() if (choice lt 0 choice gt 4)
break switch(choice) case 1 ...
On peut s'aider soi même de l'intérieur d'1
boucle
19Signature de fonctions
include ltstdio.hgt main() / Prototypes des
fonctions appelées / int ENTREE(void) int
MAX(int N1, int N2) / Déclaration des
variables / int A, B / Traitement avec appel
des fonctions / A ENTREE() B ENTREE()
printf("Le maximum est d\n", MAX(A,B)) /
Définition de la fonction ENTREE / int
ENTREE(void) int NOMBRE printf("Entrez un
nombre entier ") scanf("d", NOMBRE)
return NOMBRE / Définition de la fonction
MAX / int MAX(int N1, int N2) if (N1gtN2)
return N1 else return N2
En général, le nom d'une fonction apparaît à
trois endroits dans un programme 1) lors de la
déclaration 2) lors de la définition 3) lors de
l'appel
Définition int f1(int) int f2() void
f3(int) char f4(int, double) void f5(char,
...) double power(double, int) double
power(double base, int exponent)
- Déclarations
- Dans la définition d'une fonction, nous
indiquons - le nom de la fonction
- le type, le nombre et les noms des paramètres de
la fonction - le type du résultat fourni par la fonction
- les données locales à la fonction
- les instructions à exécuter
20Sources
http//www.tcom.ch/Tcom/Cours/C/C2.pdf http//w
ww.research.att.com/bs/bs_faq.html http//www.re
search.att.com/bs/bs_faq2.html