1 Le langage C – ANSI Jean-Paul DALBAN – Université de Nice Sophia-Antipolis –
1 Le langage C – ANSI Jean-Paul DALBAN – Université de Nice Sophia-Antipolis – 2005 Introduction Histoire... Le langage C est créé en 1972 aux Bell Labs (ATT) par Denis Ritchie pour développer le système d'exploitation UNIX. A partir de 1978, le livre "The C Programming Langage" de Brian Kernighan et Denis Ritchie sert de référence pour le langage C. Il faut attendre 1982 pour que l'ANSI (American National Standard Institute) propose un groupe de travail (X3J11) pour normaliser le langage C et sa bibliothèque standard. Le langage C ainsi normalisé est nommé couramment C ANSI. Premier programme Ce premier programme doit pouvoir être compris grossièrement avec les explications fournies. Il donne une idée de la forme d'un programme. 1 /* 2 premier.c: moyenne de deux entiers 3 jp dalban - Aôut 1992 4 */ 5 #include <stdio.h> 6 7 main() 8 { 9 int a,b; 10 float c; 11 12 printf("entrez deux entiers: "); 13 scanf("%d %d",&a,&b); 14 c = (a+b)*0.5; 15 printf("leur moyenne est: %f \n",c); 16 } Les lignes de ce programme ont été numérotés pour la convenance des explications. Lignes 1-4: Commentaires. Ils sont délimités par /* et */. Ligne 5: Directive d'inclusion du fichier stdio.h nécessaire pour utiliser les entrées/sorties Ligne 6: Ligne vide. Pour aérer un peu. Ligne 7: Entête de la fonction main. C'est la fonction principale du programme. Elle n'a pas de paramètres (si il y en avait ils seraient entre les parenthèses). Ligne 8: Début du corps de la fonction. Ligne 9: Déclaration de deux entiers a et b. Ligne 10: Déclaration d'un nombre flottant c (réel). Ligne 11: Ligne vide. Pour faire joli. Ligne 12: Printf affiche "entrez deux entiers: " Ligne 13: Scanf attend du clavier une réponse au format "%d %d" c'est à dire deux décimaux. Ces décimaux tapés au clavier seront placés le premier à l'adresse de a (c'est à dire dans la variable a), l'autre à l'adresse de b (c'est à dire dans la variable b). 2 Ligne 14: Calcul de c, moyenne de a et b. Ligne 15: Printf affiche "leur moyenne est %f \n". A la place de %f est affiché la valeur de c. Le caractère \n indique un passage à la ligne suivante. Ligne 16: Fin de la fonction main. Forme générale d'un programme Noms (ou identificateurs) Le texte d'un programme est constitué: - de symboles: parenthèses, accolades, ponctuation... - de valeurs: nombre, chaîne ... - de divers éléments: variables, fonctions, types, opérateurs ... Pour distinguer ces éléments il est nécessaire de les nommer. On appelle identificateur (ou simplement nom) le nom que l'on attribue dans un programme à un de ces éléments. Un certain nombre de noms sont prédéfinis dans le langage. En dehors de ces mots-clés, le programmeur est libre du choix de ses noms. Il doit cependant respecter certaines limites. Un nom ou identificateur: - est constitué de lettres (a-zA-Z), de chiffres (0-9), du caractère '_' (underscore), - ne doit pas commencer par un chiffre, - doit avoir au plus 31 caractères - ne doit pas être un mot clé du langage. Exemples: BON: x15, toto, nommoyennementlong, nom_moyennement_long, _a MAL: 2a, 123 Les nom qui commencent par '_' sont normalement réservés à un usage particulier. Mots-clés du langage Un mot-clé est un nom prédéfini du langage. En C ANSI, les mots-clés ne peuvent être redéfinis. Note: En C++, les mots-clés sont redéfinissables (surcharge) Ces mots-clés sont: auto default float register struct volatile break do for return switch while case double goto short typedef char else if signed union const enum int sizeof unsigned continue extern long static void 3 Forme du programme Le langage respecte un certaine syntaxe dans laquelle interviennent différents symboles: parenthèses, accolades, ponctuation, espaces. Ces symboles sont nécessaires pour assurer la structure du programme. Si cette syntaxe est respectée, la forme peut être libre. On peut écrire un programme entier sur une ligne... void main(void){int a,b;float c;c=(a+b)*0.5;} Dans cet exemple (correct), on a enlevé tous les espaces et toutes les fin de lignes superflues. Les seuls espaces restants sont indispensables car sinon des identificateurs seraient 'collés'... Evidemment, un programme doit pouvoir être lu facilement. Il doit être - aéré (lignes vides), - indenté (retraits indiquant une structure) - bien commenté (mais pas trop non plus) Dans le programme suivant on a ajouté des fins de lignes (ret) et des tabulations (tab) pour indenter le texte. void main(void) ret { ret tab int a,b; ret tab float c; ret tab c=(a+b)*0.5; ret } ret Des espaces peuvent en outre être ajoutés si le besoin se fait sentir. Commentaires Les commentaires sont compris entre /* et */. Le compilateur ignore complètement ce qui est entre ces deux limites. Exemple: /* Ceci est un commentaire */ /* Ceci aussi */ Certains compilateurs acceptent les commentaires à la C++: Exemple: // // Ceci est un // commentaire en C++ // Les types de base Les types de base du langage C sont: les entiers, les flottants, les caractères. De manière simple, un type est un modèle pour les objets utilisés par le programme. Des objets plus complexes pourront être définis à l'aide des types de base et de constructeurs: les tableaux et les structures. En outre, des objets de type pointeur peuvent être utilisés pour manipuler les objets complexes. 4 Les tableaux, les structures et les pointeurs sont étudiés plus loin. Pourquoi un type ? Rien ne sert de connaître la valeur d'un objet si on n'en pas le type... En effet, on peut toujours connaître la valeur d'un objet, ne serait-ce qu'en regardant dans la mémoire. On verra par exemple dans la mémoire à l'adresse de l'objet : 01001101 Cette configuration binaire peut être aussi bien: - le nombre 77 - la lettre M (code ASCII) - ou toute autre chose, tout dépend de la signification de l'objet pour le programmeur. Si l'on connait le type, alors parler de valeur a une signification. Si cet objet est un entier dire que sa valeur est 77 est correct. Si c'est un caractère, c'est le caractère M. Plus précisément, le type d'un objet définit: - quel ensemble de valeurs qu'il peut recevoir, - comment une valeur est codée en binaire dans la mémoire, - quelles sont les opérations qui lui sont applicables. La notion de type assure ainsi une certaine qualité de la programmation car le compilateur peut faire des vérifications sur la bonne utilisation de objets (et des paramètres des fonctions). Les entiers Le type entier est le type int. Par défaut, il s'agit d'entier signé. I Variétés d'entiers Le type int peut être préfixé de long ou short. Ce préfixe permet de choisir entre entier 16 bits (short int) et entier 32 bits (long int). Quant au type int, il est au format le plus long que la machine est capable de traiter efficacement : 16 bits sur les machines 16 bits (courant en informatique industrielle) ou 32 bits sur la plupart des machines actuelles. Les entiers sont signés par défaut. Si l'on souhaite que le bit de signe soit supprimé pour permettre à la numération d'aller plus loin, on préfixe le type entier par unsigned. unsigned 16 0 à 65 535 signed 16 -32 768 à 32 767 unsigned 32 0 à 4 294 967 295 signed 32 -2 147 483 648 à 2 147 483 647 I Formats en mémoire La représentation mémoire habituelle est celle des nombre signés en compléments à deux, 16 ou 32 bits (2 ou 4 octets). I Ecriture des constantes Le préfixe de la constante indique la base: 5 - pas de préfixe : décimal - 0 : octal (lire zéro et non lettre o) - 0x : hexadécimal Il est possible aussi d'indiquer avec l'aide d'un suffixe le type de la constante. A défaut de suffixe, la constante est int ou long int si sa valeur est trop grande pour être de type int. Le suffixe indique le type: - u,U -> unsigned int - l,L -> long int Notes: Seuls les nombres exprimés en décimal peuvent être signés. Les constantes short n'existent pas. Exemples: 99 entier en décimal, valeur +99 99L entier long en décimal, valeur +99, rangé sur 32 bits -1 entier en décimal, valeur -1 0xff entier en hexadécimal, valeur 255 soit 15*16+15*1 0111 entier en octal, valeur 73 soit 1*64+1*8+1*1 0xffffffffU entier non signé en hexadécimal, valeur 4 294 967 295 et non -1 Les caractères Le type caractère est char. Un caractère est considéré en C comme un entier. Par exemple l’écriture: c = ‘A’+1 ; est légale. Ceci permet de manipuler les caractères comme des nombres et notamment de les comparer. I Valeurs des caractères Chaque caractère possède une valeur entière comprise entre 0 et 127, codée en mémoire sur 8 bits. Le langage C ne spécifie pas si le type char est signé ou non. Il est donc imprudent d’affecter à une variable de type char une valeur dont le bit 7 serait égal à 1. Ce problème ne devrait pas se poser si uploads/Litterature/ cours-c-jpd-iut-nice-1999.pdf
Documents similaires
-
25
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Oct 23, 2022
- Catégorie Literature / Litté...
- Langue French
- Taille du fichier 0.2072MB