Cours de programmation avancée C

Sommaire: Cours de programmation avancée C

1 Les bases
1.1 Un langage compile
1.1.1 Generalit es sur les langages de programmation
1.1.2 Le C comme langage compile
1.1.3 Notes sur la normalisation du langage C
1.1.4 C en pratique : compilation et debuggage
1.2 Les mots-cles
1.3 Les commentaires
1.4 Structure generale d’un programme C
1.5 Notion d’identificateur
1.6 Conventions d’ecritures d’un programme C
1.7 Les types de base
1.7.1 Les caracteres
1.7.2 Les entiers
1.7.3 Les flottants
1.7.4 Le type void
2 La syntaxe du langage
2.1 Expressions et Operateurs
2.1.1 Operateurs arithmetiques
2.1.2 Operateurs d’affectation
2.1.3 Operateurs relationnels
2.1.4 Operateurs logiques
2.1.5 Operateurs bit a bit
2.1.6 Operateurs d’acces a la memoire
2.1.7 Autres operateurs
2.2 Les structures de controle
2.2.1 Instruction if…else
2.2.2 Instruction for
2.2.3 Instruction while
2.2.4 Instruction do…while
2.2.5 Instruction switch
2.2.6 Instruction goto
2.2.7 Instruction break
2.2.8 Instruction continue
2.3 La recursivite
2.4 Les conversions de types
2.4.1 Les situations de la conversion de type
2.4.2 La regle de ”promotion des entiers”
2.4.3 Les conversions arithmetiques habituelles
2.4.4 Les surprises de la conversion de type
2.5 Principales fonctions d’entrees-sorties standard
2.5.1 La fonction getchar
2.5.2 La fonction putchar
2.5.3 La fonction puts
2.5.4 La fonction d’ecriture a l’ecran formattee printf
2.5.5 La fonction de saisie scanf
3 Les pointeurs
3.1 Declaration d’un pointeur
3.2 Operateurs de manipulation des pointeurs
3.2.1 L’operateur ’adresse de’ &
3.2.2 L’operateur ’contenu de’ : *
3.3 Initialisation d’un pointeur
3.4 Arithmetique des pointeurs
3.5 Allocation dynamique de memoire
3.6 Liberation dynamique avec la fonction free
4 Les types dérives
4.1 Les  enumerations
4.2 Les tableaux
4.2.1 Initialisation d’un tableau
4.2.2 Tableaux multidimensionnels
4.2.3 Passage de tableau en parametre
4.2.4 Relation entre tableaux et pointeurs
4.2.5 Cas des tableaux de chaınes de caracteres
4.2.6 Gestion des arguments de la ligne de commande
4.3 Les structures
4.3.1 Initialisation et affectation d’une structure
4.3.2 Comparaison de structures
4.3.3 Tableau de structures
4.3.4 Pointeur vers une structure
4.3.5 Structures auto-r eferees
4.4 Les unions
4.4.1 Declaration d’une union
4.4.2 Utilisation pratique des unions
4.4.3 Une methode pour alleger l’acces aux membres
4.5 Les champs de bits
4.6 Definition de synonymes de types avec typedef
5 Retour sur les fonctions
5.1 Declaration et definition d’une fonction
5.2 Appel d’une fonction
5.3 Duree de vie des identificateurs
5.4 Portee des variables
5.4.1 Variables globales
5.4.2 Variables locales
5.5 Recursivite
5.6 Passage de parametres a une fonction
5.6.1 Generalites
5.6.2 Passage des parametres par valeur
5.6.3 Passage des parametres par adresse
5.6.4 Passage de tableau en parametre
5.7 Fonction a nombre variable de parametres
5.8 Pointeurs sur une fonction
6 Gestion des fichiers
6.1 Ouverture et fermeture de fichiers
6.1.1 Ouverture de fichiers : la fonction fopen
6.1.2 Fermeture de fichiers : la fonction fclose
6.2 Les entrees-sorties formatees
6.2.1 La fonction d’ecriture en fichier fprintf
6.2.2 La fonction de saisie en fichier fscanf
6.3 Impression et lecture de caracteres dans un fichier
6.3.1 Lecture et  ecriture par caractere : fgetc et fputc
6.3.2 Lecture et  ecriture optimisees par caractere : getc et putc
6.3.3 Relecture d’un caractere
6.3.4 Les entrees-sorties binaires : fread et fwrite
6.3.5 Positionnement dans un fichier : fseek, rewind et ftell
7 Les directives du pr eprocesseur
7.1 La directive #include
7.2 La directive #define
7.2.1 Definition de constantes symboliques
7.2.2 Les macros avec parametres
7.3 La compilation conditionnelle
7.3.1 Condition liee a la valeur d’une expression
7.3.2 Condition liee a l’existence d’un symbole
7.3.3 L’operateur defined
7.3.4 La commande #error
7.3.5 La commande #pragma
8 La programmation modulaire
8.1 Principes  elementaires
8.2 Eviter les erreurs d’inclusions multiples
8.3 La compilation separee
8.4 Resume des regles de programmation modulaire
8.5 L’outils ’make’
8.5.1 Principe de base
8.5.2 Creation d’un Makefile
8.5.3 Utilisation de macros et de variables
9 La bibliotheque standard
9.1 Diagnostics d’erreurs <assert.h>
9.2 Gestion des nombres complexes <complex.h>
9.3 Classification de caracteres et changements de casse <ctype.h>
9.4 Valeur du dernier signal d’erreur <errno.h>
9.5 Gestion d’un environnement a virgule flottante <fenv.h>
9.5.1 Gestion des exceptions
9.5.2 Gestion des arrondis
9.5.3 Gestion des environnements en virgule flottante
9.6 Intervalle et precision des nombres flottants <float.h>
9.7 Definitions de types entiers de taille fixee <inttypes.h>
9.8 Alias d’operateurs logiques et binaires <iso646.h>
9.9 Intervalle de valeur des types entiers <limits.h>
9.10 Gestion de l’environnement local <locale.h>
9.11 Les fonctions mathematiques de <math.h>
9.11.1 Fonctions trigonometriques et hyperboliques
9.11.2 Fonctions exponentielles et logarithmiques
9.11.3 Fonctions diverses
9.12 Branchements non locaux <setjmp.h>
9.13 Manipulation des signaux <signal.h>
9.14 Nombre variable de parametres <stdarg.h>
9.15 Definition du type booleen <stdbool.h>
9.16 Definitions standards <stddef.h>
9.17 Definitions de types entiers <stdint.h>
9.18 Entr ees-sorties <stdio.h>
9.18.1 Manipulation de fichiers
9.18.2 Entrees et sorties formatees
9.18.3 Impression et lecture de caracteres
9.19 Utilitaires divers <stdlib.h>
9.19.1 Allocation dynamique
9.19.2 Conversion de chaınes de caracteres en nombres
9.19.3 Generation de nombres pseudo-al eatoires
9.19.4 Arithmetique sur les entiers
9.19.5 Recherche et tri
9.19.6 Communication avec l’environnement
9.20 Manipulation de chaınes de caracteres <string.h>
9.21 Macros generiques pour les fonctions mathematiques <tgmath.h>
9.22 Date et heure <time.h>
9.23 Manipulation de caracteres  et endus <wchar.h> et <wctype.h>
A Etude de quelques exemples
A.1 Gestion des arguments de la ligne de commande
A.2 Exemple de liste chaınee
B Makefile generique
C Le betisier
C.1 Erreur avec les op erateurs
C.1.1 Erreur sur une comparaison
C.1.2 Erreur sur l’affectation
C.2 Erreurs avec les macros
C.2.1 Un #define n’est pas une declaration
C.2.2 Un #define n’est pas une initialisation
C.2.3 Erreur sur macro avec parametres
C.2.4 Erreur avec les effets de bord
C.3 Erreurs avec l’instruction if
C.4 Erreurs avec les commentaires
C.5 Erreurs avec les priorites des operateurs
C.6 Erreur avec l’instruction switch
C.6.1 Oubli du break
C.6.2 Erreur sur le default
C.7 Erreur sur les tableaux multidimensionnels
C.8 Erreur avec la compilation separee
C.9 Liens utiles

Extrait du cours programmation avancée C

Chapitre 1 Les bases
1.1 Un langage compile
1.1.1 Generalites sur les langages de programmation
Dans le domaine de la programmation, on utilise aujourd’hui des langages de programmation de haut niveau (i.e ”facilement” comprehensibles par le programmeur) par opposition aux langages de bas niveau (de type assembleur) qui sont plus orientes vers le langage machine. Parmi les exemples de langages de haut niveau, on peut citer les langages C, C++, Java, Cobol etc…
Il est neanmoins necessaire d’operer une operation de traduction du langage de haut niveau vers le langage machine (binaire). On distingue deux types de traducteurs :
1. l’interpreteur qui traduit les programmes instruction par instruction dans le cadre d’une interaction continue avec l’utilisateur. Ainsi, le programme est traduit `a chaque execution.
2. le compilateur qui traduit les programmes dans leur ensemble : tout le programme doit ˆetre fourni en bloc au compilateur pour la traduction. Il est traduit une seule fois.
1.1.2 Le C comme langage compile
Le langage C est donc un langage compile (mˆeme s’il existe des interpreteurs plus ou moins experimentaux). Ainsi, un programme C est decrit par un fichier texte, appele fichier source. La compilation se decompose en fait en 4 phases successives
1. Le traitement par le preprocesseur : le fichier source (portant l’extension .c) est analyse par le preprocesseur qui effectue des transformations purement textuelles (remplacement de chaˆınes de caract`eres, inclusion d’autres fichiers sources, compilation conditionnelle …). Les differentes commandes
qui peuvent ˆetre fournies au preprocesseur seront exposees dans le chapitre 7.
2. La compilation : la compilation proprement dite traduit le fichier genere par le preprocesseur (d’extension .i) en assembleur, c’est-`a-dire en une suite d’instructions du microprocesseur qui utilisent des mnemoniques rendant la lecture possible.
3. L’assemblage : cette operation transforme le code assembleur (extension .s) en un fichier binaire, c’est-`a-dire en instructions directement comprehensibles par le processeur. Generalement, la compilation et l’assemblage se font dans la foulee, sauf si l’on specifie explicitement que l’on veut le code assembleur. Le fichier produit par l’assemblage est appele fichier objet (et porte l’extension .o). Les fichiers objets correspondant aux librairies pre-compilees ont pour suffixe .a.
1.1.3 Notes sur la normalisation du langage C
[KR88], publie initialement en 1978 par Brian W. Kernighan et Denis M. Ritchie a fait office de norme pendant longtemps (on parle alors de C K&R, en reference aux 2 auteurs).Devant la popularite du C, l’American National Standard Institut charge en 1983 le comite X3J11 de standardiser le langage C. Le fruit de ce travail est finalement ete approuve en decembre 1989, le standard ANSI C89 est ne.
L’International Organization for Standardization a adopte en 1990 ce standard en tant que standard international sous le nom de ISO C90. Ce standard ISO remplace le precedent standard ANSI (C89) mˆeme a l’int erieur des USA, car rappelons-le, ANSI est une organisation nationale, et non internationale comme l’ISO.
1.1.4 C en pratique : compilation et debuggage
Compilation d’un programme C Il existe evidemment un grand nombre de compilateurs C pour chaque plateforme (Windows, Linux, MAC etc…). Le compilateur detaille dans cette section correspond au compilateur libre gcc, disponible sur quasiment toutes les plate formes UNIX.
La compilation du fichier prog.c se deroule en general en deux etapes :
1. traduction du langage C dans le langage de la machine (binaire) sous forme d’un fichier objet prog.o :
gcc -O3 -Wall -c prog.c
2. regroupement des variables et des fonctions du programme avec les fonctions fournies par des bibliotheques du systeme ou faites par l’utilisateur (edition de liens) : gcc -o prog prog.o Ces deux commandes ont donc permis de generer l’executable prog qui peut alors est lance (./prog dans une fenˆetre de shell).

………

Si le lien ne fonctionne pas correctement, veuillez nous contacter (mentionner le lien dans votre message)
Cours de programmation avancée C (886 KO) (Cours PDF)
Programmation avancée C

Télécharger aussi :

Laisser un commentaire

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