Classe 0

publicité
L’ 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 d’exploitation 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 s’occuper, Ken Thompson décide de programmer des jeux sur le PDP8, et comme il ne dispose pas d’un système d’exploitation qui le satisfasse,
il commence par développer un système d’exploitation. Ce sera la première
version de UNIX, écrite entièrement en assembleur.
Lire plus ici
En 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
l’appellera 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 l’alphabet, ou la
deuxième lettre de BCPL.
Dennis Ritchie parvient à persuader Ken
Thompson de récrire UNIX sur une machine
plus performante, un PDP11.
Au lieu d’utiliser l’assembleur, on va utiliser
Le langage de Ritchie, C.
Cette décision est à considéré comme un des
Plus importants tournants de l’histoire de
l’informatique: Pour la première fois, on va
créer un système d’exploitation écrit dans un
langage indépendant de la machine cible :
pour la première fois, on va développer un
système d’exploitation portable au niveau
source.
Cette grande première va faire le succès de
UNIX, et le succès de C.
Et là:
AT&T reprendra progressivement le
développement de UNIX, en fournissant des
licences source à bas prix, comprenant le
compilateur Kernighan&Ritchie (ou K&R) à
tous les utilisateurs potentiels.
Petit à petit, UNIX s’imposera comme le must
des systèmes d’exploitation à l’usage 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.
Bjarne:
Bjarne Stroustrup définit le successeur de
C. Plutôt que D ou P (soit la suite de C
dans l’alphabet, 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 à
l’opposé de produits comme CHILL ou ADA,
ayant fait l’objet d’une spécification très
poussée.
un langage, aussi bon ou aussi mauvais soitil, n’a jamais fait la qualité ni le succès
d’un programme, comme le démontre
nombre de réussites et d’échec industriels.
Beaucoup plus que le langage de programmation utilisé,
c’est le code déjà écrit et testé qui permet d’optimiser les
coûts de production de grands logiciels. Le meilleur
langage est celui que l’on 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.
Avantages 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 d’images, etc...)
offrant des interfaces écrits dans un même langage.
Commence par C:
#include <stdio.h>
/* 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
#include <stdio.h>
#include <stdlib.h>
#include <iomanip.h>
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 a+b;}
int func2(double a, float b){return a-b;}
La 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 n’importe où dans le(s)
fichier(s) source(s). Il définit les limites du programme.

Tout programme C s’arrê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.
Identificateurs 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 d’union

Ne contiennent pas d’apostrophes
•n
• i1
• counter
• x_1
Déclarations de variables:
int a, b = 2;
ICI, FAIRE ATTENTION
char x, y = 'a';
unsigned long int i1 = 0, i2 = 3;
double pi = 3.14; double d = 5*pi;
Types :
•
•
•
•
char
int
float
double

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
Types de données(int):
int
(par défault: signed short)



12 = 014 = 0xC
2568 = 05010 = 0xa08
2L
short: 2 octets (16 bits)
signed: -32768 à 32767
unsigned: 0 à 65535
long: 4 octets (32 bit)
signed: -2147483648 à 2147483647
unsigned: 0 à 4294967295
En principe, on peut dire que:
sizeof(short) <= sizeof(int) <= sizeof(long)
Ainsi sur certaines architectures on peut avoir:
short = 2 octets, int = 2 octets, long = 4 octets
et sur d'autre: short = 2 octets, int = 4 octets, long = 4 octets
Types de données(char):













'\a'
'\\'
'\b'
'\?'
'\f'
'\n'
'\"'
'\r'
'\t'
'\v'
'\ooo'
'\xhh'
'\0'
keyboard bell
back slash
back space
question mark
form feed
new line
double quote
carriage return
horizontal tab
vertical tab
char
octal byte
(par défault: signed)
hex byte
null byte signed: -128 à 127
unsigned: 0 à 255
Types 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 <NomVariable> [<Longueur>];
Exemples
char NOM [20];
char PRENOM [20];
char PHRASE [300];
 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 n+1
octets.
"a\tb" --> a
b
"abcd\b\bx" --> abx
"\"hello world\"" --> "hello world"
"I don\'t know" --> I don't know
"hello\nworld" --> hello world
"\a" --> (rings the keyboard bell)
Structures du language:
Très similaire à Java
Branchement:
if (...) stmt
if (...) stmt else stmt
if (...) { body } else { body }
if
if
if
if
(1)
(2)
(-1.5)
(0)
...
...
...
...
Opérateur ternaire:
true
true
cond ? e1 : e2
true
----------------------------------false
double x = n % 2 == 0 ? 4.3 : -2.3;
int x = 2, y;
if (x < 3) y = 5; else y = 4;
Branchement(++):
int x = 0, y = 0;
switch(n) {
case 1:
case 2:
case 3:
case 4:
case 5:
default:
};
n
x = 2;
y = 3;
break;
x = 1;
y = 4;
x = 2;
break;
y = -1;
1
2
3
4
5
x
2
2
0
2
2
y
3
3
3
4
0
Structures de répétition:
Il y a 3 structures de répétition:
for(e1;e2;e3)
...
int f=1, i;
while(cond) ...
int f=1, i=2;
for(i=2; i<=n; ++i) f = f *i;
for(;;) ...
while(i <= n) f = f * i++;
do body while(cond);
int f=1, i = 1;
do {
f = f * i++;
} while(i <= n);
goto(rare)
répétition(++):
void f() {
break & continue
...peut s'aider soi même de l'intérieur d'1 boucle:
On
int i, r = 0;
for( ... ) {
for(i=0; i<n; ++i) {
while( ... ) {
if (r % 2 == 0) continue;
...
r += i;
if (wrong) goto error;
}
...
int choice = 0;
}
while(1) {
for( ... ) {
choice = user_input();
if (wrong) goto error; ... } }
if (choice < 0 || choice > 4) break;
...
switch(choice) {
error:
case 1: ...
...
}}
#include <stdio.h>
Signature de fonctions:
int ENTREE(void);
int
MAX(int
N1, d'une
int fonction
N2); apparaît à trois endroits dans un programme:
En général,
le nom
Définition:
1) lors de la déclaration
main()
int
2) lorsf1(int);
de{la définition
Déclarations:
/*
Prototypes
des
fonctions
appelées */
3) lors de l'appel
intDans
f2();
la déclaration d'une fonction, nous indiquons:
/* Déclaration des variables */
void
f3(int);
 leintnom
A, de
B;la/*
fonction
Traitement avec appel des fonctions */
A = ENTREE();
char
f4(int,
 le type, ledouble);
nombre et les noms des paramètres de la fonction
B = ENTREE();
void f5(char*,
...);
printf("Le
maximum
MAX(A,B));
le type du résultat
fourniest
par%d\n",
la fonction
}
double
power(double,
int);
/* Définition
les
données
de la
locales
fonction
à la fonction
ENTREE */
int
ENTREE(void)
{
double
power(double
base, int exponent);
les
instructions
à
exécuter
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 (N1>N2) return N1; else return N2;



Sources:
http://www.tcom.ch/Tcom/Cours/C++/C2.pdf
http://www.research.att.com/~bs/bs_faq.html
http://www.research.att.com/~bs/bs_faq2.html
Téléchargement