Cours Langage C structure générale d’un programme

Langage C structure générale d’un programme, tutoriel & guide de travaux pratiques en pdf.

I – Eléments de base
I-A – Structure générale d’un programme
I-B – Considérations lexicales
I-B-1 – Présentation du texte du programme
I-B-2 – Mots-clés
I-B-3 – Identificateurs
I-B-4 – Opérateurs
I-C – Constantes littérales
I-C-1 – Nombres entiers
I-C-2 – Nombres flottants
I-C-3 – Caractères et chaines de caractères
I-C-4 – Expressions constantes
I-D – Types fondamentaux
I-D-1 – Nombres entiers et caractères
I-D-2 – Types énumérés
I-D-3 – Nombres flottants
I-E – Variables
I-E-1 – Syntaxe des déclarations
I-E-2 – Visibilité des variables
I-E-3 – Allocation et durée de vie des variables
I-E-4 – Initialisation des variables
I-E-5 – Variables locales statiques
I-E-6 – Variables critiques
I-E-7 – Variables constantes et volatiles
I-F – Variables, fonctions et compilation séparée
I-F-1 – Identificateurs publics et privés
I-F-2 – Déclaration d’objets externes
II – Opérateurs et expressions
II-A – Généralités
II-A-1 – Lvalue et rvalue
II-A-2 – Priorité des opérateurs
II-B – Présentation détaillée des opérateurs
II-B-1 – Appel de fonction
II-B-2 – Indexation
II-B-3 – Sélection
II-B-4 – Sélection dans un objet pointé
II-B-5 – Négation
II-B-6 – Complément à 1
II-B-7 – Les célèbres ++ et
II-B-8 – Moins unaire
II-B-9 – Indirection
II-B-10 – Obtention de l’adresse
II-B-11 – Opérateur sizeof
II-B-12 – Conversion de type (\cast » operator
II-B-13 – Opérateurs arithmétiques
II-B-14 – Décalages <<
II-B-15 – Comparaisons == != < <= >
II-B-16 – Opérateurs de bits & |
II-B-17 – Connecteurs logiques && et
II-B-18 – Expression conditionnelle ?
II-B-19 – Affectation
II-B-20 – Autres opérateurs d’affectation += *= etc
II-B-21 – L’opérateur virgule
II-C – Autres remarques
II-C-1 – Les conversions usuelles
II-C-2 – L’ordre d’évaluation des expressions
II-C-3 – Les opérations non abstraites
III – Instructions
III-A – Syntaxe
III-B – Présentation détaillée des instructions
III-B-1 – Blocs
III-B-2 – Instruction-expression
III-B-3 – Etiquettes et instruction goto
III-B-4 – Instruction if…else
III-B-5 – Instructions while et do…while
III-B-6 – Instruction for
III-B-7 – Instruction switch
III-B-8 – Instructions break et continue
III-B-9 – Instruction return
IV – FonctionsIV-A – Syntaxe ANSI ou « avec prototype
IV-A-1 – Définition
IV-A-2 – Type de la fonction et des arguments
IV-A-3 – Appel des fonctions
IV-A-4 – Déclaration « externe » d’une fonction
IV-B – Syntaxe originale ou « sans prototype
IV-B-1 – Déclaration et définition
IV-B-2 – Appel
IV-B-3 – Coexistence des deux syntaxes
IV-C – Arguments des fonctions
IV-C-1 – Passage des arguments
IV-C-2 – Arguments de type tableau
IV-C-3 – Arguments par adresse
IV-C-4 – Arguments en nombre variable
V – Objets structurés
V-A – Tableaux
V-A-1 – Cas général
V-A-2 – Initialisation des tableaux
V-A-3 – Chaines de caractères
V-B – Structures et unions
V-B-1 – Structures
V-B-2 – Unions
V-B-3 – Champs de bits
V-C – Enumérations
V-D – Déclarateurs complexes
V-D-1 – Cas des déclarations
V-D-2 – Pointeurs et tableaux constants et volatils
V-D-3 – La déclaration typedef
V-D-4 – Cas des types désincarnés
VI – Pointeurs
VI-A – Généralités
VI-A-1 – Déclaration et initialisation des pointeurs
VI-A-2 – Les pointeurs génériques et le pointeur NULL
VI-B – Les pointeurs et les tableaux
VI-B-1 – Arithmétique des adresses, indirection et indexation
VI-B-2 – Tableaux dynamiques
VI-B-3 – Tableaux multidimensionnels
VI-B-4 – Tableaux multidimensionnels dynamiques
VI-B-5 – Tableaux de chaines de caractères
VI-B-6 – Tableaux multidimensionnels formels
VI-B-7 – Tableaux non nécessairement indexés à partir de zéro
VI-B-8 – Matrices non dynamiques de taille inconnue
VI-C – Les adresses des fonctions
VI-C-1 – Les fonctions et leurs adresses
VI-C-2 – Fonctions formelles
VI-C-3 – Tableaux de fonctions
VI-C-4 – Flou artistique
VI-D – Structures récursives
VI-D-1 – Déclaration
VI-D-2 – Exemple
VI-D-3 – Structures mutuellement récursives
VII – Entrées-sorties
VII-A – Flots
VII-A-1 – Fonctions générales sur les flots
VII-A-2 – Les unités standard d’entrée-sortie
VII-B – Lecture et écriture textuelles
VII-B-1 – Lecture et écriture de caractères et de chaines
VII-B-2 – Ecriture avec format printf
VII-B-3 – Lecture avec format scanf
VII-B-4 – A propos de la fonction scanf et des lectures interactives
VII-B-5 – Les variantes de printf et scanf
VII-C – Opérations en mode binaire
VII-C-1 – Lecture-écriture
VII-C-2 – Positionnement dans les fichiers
VII-D – Exemples
VII-D-1 – Fichiers « en vrac
VII-D-2 – Fichiers binaires et fichiers de texte
VII-D-3 – Fichiers en accès relatif
VII-E – Les fichiers de bas niveau d’UNIX
VIII – Autres éléments du langage C
VIII-A – Le préprocesseur
VIII-A-1 – Inclusion de fichiers
VIII-A-2 – Définition et appel des « macros
VIII-A-3 – Compilation conditionnelle
VIII-B – La modularité de C
VIII-B-1 – Fichiers en-tête
VIII-B-2 – Exemple : stdio.h
VIII-C – Deux ou trois choses bien pratiques
VIII-C-1 – Les arguments du programme principal
VIII-C-2 – Branchements hors fonction : setter.h
VIII-C-3 – Interruptions : signal.h
VIII-D – La bibliothèque standard
VIII-D-1 – Aide à la mise au point : assert.h
VIII-D-2 – Fonctions utilitaires : stdlib.h
VIII-D-3 – Traitement de chaines : string.h
VIII-D-4 – Classification des caractères : ctype.h
VIII-D-5 – Fonctions mathématiques : math.h
VIII-D-6 – Limites propres à l’implémentation : limits.h, float.h

Eléments de base

Structure générale d’un programme
La transformation d’un texte écrit en langage C en un programme exécutable par l’ordinateur se fait en deux étapes :
la compilation et l’édition de liens. La compilation est la traduction des fonctions écrites en C en des procédures équivalentes écrites dans un langage dont la machine peut exécuter les instructions. Le compilateur lit toujours un fichier, appelé fichier source, et produit un fichier, dit fichier objet.
Chaque fichier objet est incomplet, insuffisant pour être exécuté, car il contient des appels de fonctions ou des références à des variables qui ne sont pas définies dans le même fichier. Par exemple, le premier programme que vous écrirez contiendra déjà la fonction printf que vous n’aurez certainement pas écrite vous-même. L’édition de liens est l’opération par laquelle plusieurs fichiers objets sont mis ensemble pour se compléter mutuellement : un fichier apporte des définitions de fonctions et de variables auxquelles un autre fichier fait référence et réciproquement.

LIRE AUSSI :  C++ constructeurs et destructeurs

Considérations lexicales
Présentation du texte du programme
Le programmeur est maitre de la disposition du texte du programme. Des blancs, des tabulations et des sauts à la ligne peuvent être placés à tout endroit ou cela ne coupe pas un identificateur, un nombre ou un symbole composé2.
Les commentaires commencent par /* et se terminent par */ :
/* Ce texte est un commentaire et sera donc ignoré par le compilateur */
Les commentaires ne peuvent pas être imbriqués : écrit dans un programme, le texte /* voici un grand /* et un petit */
commentaire */ est erroné, car seul /* voici un grand /* et un petit */sera vu comme un commentaire par le compilateur.
Les langages C et C++ cohabitant dans la plupart des compilateurs actuels, ces derniers acceptent également comme commentaire tout texte compris entre le signe // et la fin de la ligne ou ce signe apparait :
// Ceci est un commentaire à la mode C++.
Le caractère anti-slash \ précédant immédiatement un saut à la ligne masque ce dernier : la ligne suivante est considérée comme devant être concaténée à la ligne courante. Cela est vrai en toute circonstance, y compris à l’intérieur d’une chaine de caractères.

Mots-clés
Les mots suivants sont réservés. Leur fonction est prévue par la syntaxe de C et ils ne peuvent pas être utilisés..

Identificateurs
Un identificateur est une suite de lettres et chiffres contigus, dont le premier est une lettre. Lorsque seul le compilateur est concerné, c’est-à-dire lorsqu’il s’agit d’identificateurs dont la portée est incluse dans un seul fichier (nous dirons de tels identificateurs qu’ils sont privés) :

• en toute circonstance une lettre majuscule est tenue pour différente de la lettre minuscule correspondante ;
• dans les identificateurs, le nombre de caractères discriminants est au moins de 31.

Opérateurs

Tous ces symboles sont reconnus par le compilateur comme des opérateurs. Il est interdit d’insérer des caractères blancs à l’intérieur d’un symbole composé. En outre, il est conseillé d’encadrer par des blancs toute utilisation d’un opérateur. Dans certaines circonstances cette règle est plus qu’un conseil, car sa non-observance crée une expression ambigüe.

Constantes littérales
Nombres entiers
Les constantes littérales numériques entières ou réelles suivent les conventions habituelles, avec quelques particularités.
Les constantes littérales sont sans signe : l’expression -123 est comprise comme l’application de l’opérateur unaire – à la constante 123 ; mais puisque le calcul est fait pendant la compilation, cette subtilité n’a aucune conséquence pour le programmeur. Notez aussi qu’en C original, comme il n’existe pas d’opérateur + unaire, la notation +123 est interdite.

Nombres flottants

Une constante littérale est l’expression d’un nombre flottant si elle présente, dans l’ordre :
• une suite de chiffres décimaux (la partie entière),
• un point, qui joue le rôle de virgule décimale,
• une suite de chiffres décimaux (la partie fractionnaire),
• une des deux lettres E ou e,
• éventuellement un signe + ou -,
• une suite de chiffres décimaux.

Caractères et chaines de caractères
Une constante de type caractère se note en écrivant le caractère entre apostrophes. Une constante de type chaine de caractères se note en écrivant ses caractères entre guillemets. Exemples, trois caractères :
‘A’ ‘2’ ‘ »‘
Quatre chaines de caractères :
« A » « Bonjour à tous ! » «  » « ‘ »
On peut faire figurer n’importe quel caractère, même non imprimable, dans une constante caractère ou chaine de caractères en utilisant les combinaisons suivantes, appelées séquences d’échappement..

Expressions constantes
Une expression constante est une expression de l’un des types suivants :
• toute constante littérale ; exemples : 1, ‘A’, « HELLO », 1.5e-2 ;

• une expression correcte formée par l’application d’un opérateur courant (arithmétique, logique, etc.) à une ou deux expressions constantes ; exemples : -1, ‘A’ – ‘a’, 2 * 3.14159265, « HELLO » + 6 ;
• l’expression constituée par l’application de l’opérateur & (opérateur de calcul de l’adresse, voyez la section 2.2.10) à une variable statique, à un champ d’une variable statique de type structure ou à un élément d’un tableau statique dont le rang est donné par une expression constante ; exemples : &x, &fiche.nom, &table[50] ;
• l’expression constituée par l’application de l’opérateur sizeof à un descripteur de type. Exemples : sizeof(int),
sizeof(char *) ;
• l’expression constituée par l’application de l’opérateur sizeof à une expression quelconque, qui ne sera pas évaluée ; exemples : sizeof x, sizeof(2 * x + 3).

Types fondamentaux

Le tableau 1 présente l’ensemble des types connus du compilateur C. L’organisation générale de cet ensemble est évidente : on dispose de deux sortes de types de base, les nombres entiers et les nombres flottants, et d’une famille infinie de types dérivés obtenus en appliquant quelques procédés récursifs de construction soit à des types fondamentaux soit à des types dérivés définis de la même manière.

Nombres entiers et caractères
La classification des types numériques obéit à deux critères :
• Si on cherche à représenter un ensemble de nombres tous positifs on pourra adopter un type non signé ; au contraire si on doit représenter un ensemble contenant des nombres positifs et des nombres négatifs on devra utiliser un type signé 5.
• Le deuxième critère de classification des données numériques est la taille requise par leur représentation.
Comme précédemment, c’est un attribut d’un ensemble, et donc d’une variable devant représenter tout élément de l’ensemble, non d’une valeur particulière. Par exemple, le nombre 123 considéré comme un élément de l’ensemble {0 … 65535} est plus encombrant que le même nombre 123 quand il est considéré comme un élément de l’ensemble {0 … 255}.

Si le lien ne fonctionne pas correctement, veuillez nous contacter (mentionner le lien dans votre message)
Structure générale d’un programme (1.71 MO) (Cours PDF)
Langage C

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *