Cours IDRIS : langage C Support de cours |
Document ralis partir des transparents
du cours "Langage C" de l'IDRIS.
Pour une impression correcte, utilisez la version
PostScript.
Langage de programmation dvelopp en 1970 par Dennie Ritchie aux Laboratoires Bell d'AT&T. Il est l'aboutissement de deux langages :
Il fut limit l'usage interne de Bell jusqu'en 1978 date laquelle Brian Kernighan et Dennie Ritchie publirent les spcifications dfinitives du langage : << The C programming Language >>.
Au milieu des annes 1980 la popularit du langage tait tablie. De nombreux compilateurs ont t crits, mais comportant quelques incompatibilits portant atteinte l'objectif de portabilit. Il s'est ensuivi un travail de normalisation effectu par le comit de normalisation X3J11 de l'ANSI qui a abouti en 1988 avec la parution par la suite du manuel : << The C programming Language - 2me dition >>.
! | * | + | \ | " | < |
# | ( | = | | | { | > |
% | ) | ~ | ; | ] | / |
^ | - | [ | : | , | ? |
& | _ | } | ' | . | (espace) |
Exemples
x | y12 | somme_1 | _temperature |
noms | surface | fin_de_fichier | TABLE |
4eme | commence par un chiffre |
x#y | caractre non autoris (#) |
no-commande | caractre non autoris (-) |
taux change | caractre non autoris (espace) |
auto | extern | sizeof |
break | float | static |
case | for | struct |
char | goto | switch |
const | if | typedef |
continue | int | union |
default | long | unsigned |
do | register | void |
double | return | volatile |
else | short | while |
enum | signed | |
Exemple :
#include
Cette commande admet plusieurs options telles :
De plus il existe un type ensemble vide : le type void.
Les mots-cls short et long permettent d'influer sur la taille mmoire des entiers et des rels.
Liste des diffrents types de base
Syntaxe | Type |
void | ensemble vide |
char | caractre |
short int | entier court |
int | entier par dfaut |
long int | entier long |
float | rel simple prcision |
double | rel double prcision |
long double | rel prcision tendue |
Remarques
Les deux mots-cls unsigned et signed peuvent
s'appliquer aux types caractre et entier pour indiquer si le bit
de poids fort doit tre considr ou non comme un bit de signe.
Les entiers sont signs par dfaut, tandis que les caractres
peuvent l'tre ou pas suivant le compilateur utilis.
Une dclaration telle que unsigned char permettra de dsigner
une quantit comprise entre 0 et 255,
tandis que signed char dsignera une quantit comprise
entre -128 et +127.
De mme unsigned long permettra de dsigner une quantit
comprise entre 0 et
232-1, et long
une quantit comprise entre -231 et
231-1.
Exemple
#include <stdio.h>
unsigned char mask;
long val;
main()
{
unsigned int indice;
float x;
double y;
char c;
...
return;
}
double f(double x)
{
unsigned short taille;
int i;
unsigned long temps;
double y;
...
return y;
}
Les numrations sont des types dfinissant un ensemble de constantes qui portent un nom que l'on appelle numrateur. Elles servent rajouter du sens de simples numros, dfinir des variables qui ne peuvent prendre leur valeur que dans un ensemble fini de valeurs possibles identifies par un nom symbolique.
Syntaxe
enum [nom] {
numrateur1,
numrateur2,
numrateur3,
...
numrateurn
};
Les constantes figurant dans les numrations ont une valeur entire affecte de faon automatique par le compilateur en partant de 0 par dfaut et avec une progression de 1. Les valeurs initiales peuvent tre forces lors de la dfinition.
enum couleurs {noir, bleu, vert, rouge, blanc,
jaune};
enum couleurs {
noir = -1,
bleu,
vert,
rouge = 5,
blanc,
jaune
};
Dans le 1er exemple, les valeurs gnres par le compilateur seront :
noir | 0 | vert | 2 | blanc | 4 |
bleu | 1 | rouge | 3 | jaune | 5 |
et dans le 2e :
noir | -1 | vert | 1 | blanc | 6 |
bleu | 0 | rouge | 5 | jaune | 7 |
L'adresse d'un objet est indissociable de son type. On pourra se dfinir par exemple des pointeurs de caractres, des pointeurs d'entiers voire des pointeurs d'objets plus complexes.
L'opration fondamentale effectue sur les pointeurs est l'indirection, c'est--dire l'valuation de l'objet point. Le rsultat de cette indirection dpend du type de l'objet point.
Par exemple si p_car et p_reel sont respectivement un pointeur de caractres et un pointeur de rel simple prcision rfrenant la mme adresse µ, une indirection effectue sur p_car dsignera le caractre situ l'adresse µ, tandis qu'une indirection effectue sur p_reel dsignera le rel simple prcision situe la mme adresse.
Bien qu'ayant le mme contenu (l'adresse µ), ces deux pointeurs ne sont pas identiques !
< type > < construction > [,< construction >,...];
o type est un type lmentaire (type de base, numration de constantes) ou un type que l'on s'est dfini, et construction est soit un identificateur soit un objet plus complexe construit l'aide de constructeurs homognes.
Symboles associs aux constructeurs homognes
Symbole | Objet construit |
* | pointeur |
[ ] | vecteur |
( ) | fonction |
Exemple
char lignes[100];
int *p_entier;
double fonc();
Les dclarations prcdentes permettent de dfinir respectivement :
Ces constructeurs peuvent se combiner entre eux, permettant ainsi de dfinir des objets encore plus complexes.
Exemple
char *chaines[100];
int mat[100][40];
char **argv;
Le constructeur homogne * est moins prioritaire que
les deux autres.
De ce fait, les dclarations prcdentes permettent de dfinir
respectivement :
L'utilisation de parenthses permet de modifier la priorit et donc l'ordre d'valuation.
Exemple
int (*tab)[10];
char (*f)();
char *(*g)();
float *(*tabf[20])();
Cet exemple permet de dfinir respectivement :
Il en existe 3 :
Les structures permettent de regrouper des objets dont les types peuvent tre diffrents.
Syntaxe
struct [ nom ] {
< liste de dclarations >
};
Les objets regroups sont les membres ou composantes
de la structure les contenant.
Remarques
Exemple
struct {
char c;
unsigned int i;
float tab[10];
char *p;
MMΰ
==ϟ >=
Default 0 @ 0 2 A 0 G P 0 R 0 S 0 0
?
? @ Box01 A A 8 _F@@WpH?`IPpRQKpEPZCp"A$NAgğ? n%;,^%WAißX A;BnU@
-B;U,CBJXB;-=16"oBZ<=6"oB6J6"
oB#V6"
oBF@N%p?ͶN%p¼;
N%p+EFN%pAq#?TwM>TjMy,4s\/ A
pBV@BܗTBB-a-=X#oB