Title: L
1L histoire
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. Lire plus
ici
2En même temps
Un autre programmeur de Bell Labs,
Dennis Ritchie utilise le Langage BCPL, 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 si C
représente la lettre venant après B dans
lalphabet, ou la deuxième lettre de BCPL.
3- Dennis Ritchie parvient à persuader Ken
- Thompson de récrire UNIX sur une machine
- plus performante, un PDP11.
- 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 le succès de C.
4Et 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 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.
5Bjarne
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.
6- 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.
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.
7Avantages 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êtrage
s, algorithmique, traitement dimages,
etc...) offrant des interfaces écrits dans un
même langage.
8Commence 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
9include ltstdio.hgt include ltstdlib.hgt include
ltiomanip.hgt double func1(char, int) int
func2(double, float) int main()
printf(Value is d, func2(func1(a, 2),
5.2f) return 0 double func1(char a, int
b)return ab int func2(double a, float
b)return a-b
10La fonction main()
int main()
- Cette fonction est essentielle en C/C. Elle
figure dans tous les programmes où elle apparait
une et une seule 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.
11Identificateurs 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
12Dé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
13Types
- 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
14Types 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
15Types 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
16Types 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.
17Structures du language
Très similaire à Java
18Branchement
- 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
19Branchement()
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
20Structures 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)
21ré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
22Signature de fonctions
include ltstdio.hgt int ENTREE(void) int
MAX(int N1, int N2) main() / Prototypes
des fonctions appelées / / 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éclaration 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
23Sources
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