Sommaire: Cours langage C gratuit: Avancée
1 Les bases
1.1 Un langage compilé
1.1.1 Généralités sur les langages de programmation
1.1.2 Le C comme langage compilé
1.1.3 Notes sur la normalisation du langage C
1.1.4 C en pratique : compilation et débuggage
1.2 Les mots-clés
1.3 Les commentaires
1.4 Structure générale d’un programme C
1.5 Notion d’identificateur
1.6 Conventions d’écritures d’un programme C
1.7 Les types de base
1.7.1 Les caractères
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 Opérateurs
2.1.1 Opérateurs arithmétiques
2.1.2 Opérateurs d’affectation
2.1.3 Opérateurs relationnels
2.1.4 Opérateurs logiques
2.1.5 Opérateurs bit à bit
2.1.6 Opérateurs d’accès à la mémoire
2.1.7 Autres opérateurs
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 récursivité
2.4 Les conversions de types
2.4.1 Les situations de la conversion de type
2.4.2 La règle de ”promotion des entiers”
2.4.3 Les conversions arithmétiques habituelles
2.4.4 Les surprises de la conversion de type
2.5 Principales fonctions d’entrées-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’écriture à l’écran formattée printf
2.5.5 La fonction de saisie scanf
3 Les pointeurs
3.1 Déclaration d’un pointeur
3.2 Opérateurs de manipulation des pointeurs
3.2.1 L’opérateur adresse de &
3.2.2 L’opérateur contenu de : *
3.3 Initialisation d’un pointeur
3.4 Arithmétique des pointeurs
3.5 Allocation dynamique de mémoire
3.6 Libération dynamique avec la fonction free
4 Les types dérivés
4.1 Les énumérations
4.2 Les tableaux
4.2.1 Initialisation d’un tableau
4.2.2 Tableaux multidimensionnels
4.2.3 Passage de tableau en paramètre
4.2.4 Relation entre tableaux et pointeurs
4.2.5 Cas des tableaux de chaınes de caractères
4.2.6 Gestion des arguments de la ligne de commande
4.3 Les structures
4.3.1 Initialisation et affectation dune 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éférées
4.4 Les unions
4.4.1 Déclaration dune union
4.4.2 Utilisation pratique des unions
4.4.3 Une méthode pour alléger l’accès aux membres
4.5 Les champs de bits
4.6 Définition de synonymes de types avec type de f
5 Retour sur les fonctions
5.1 Déclaration et définition dune fonction
5.2 Appel dune fonction
5.3 Durée de vie des identificateurs
5.4 Portée des variables
5.4.1 Variables globales
5.4.2 Variables locales
5.5 Récursivité
5.6 Passage de paramètres à une fonction
5.6.1 Généralités
5.6.2 Passage des paramètres par valeur
5.6.3 Passage des paramètres par adresse
5.6.4 Passage de tableau en paramètre
5.7 Fonction à nombre variable de paramètres
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 entrées-sorties formatées
6.2.1 La fonction d’écriture en fichier fprintf
6.2.2 La fonction de saisie en fichier fscanf
6.3 Impression et lecture de caractères dans un fichier
6.3.1 Lecture et écriture par caractère : fgetc et fputc
6.3.2 Lecture et écriture optimisées par caractère : getc et putc
6.3.3 Relecture d’un caractère
6.3.4 Les entrées-sorties binaires : fread et fwrite
6.3.5 Positionnement dans un fichier : fseek, rewind et ftell
7 Les directives du préprocesseur
7.1 La directive #include
7.2 La directive #define
7.2.1 Définition de constantes symboliques
7.2.2 Les macros avec paramètres
7.3 La compilation conditionnelle
7.3.1 Condition liée à la valeur dune expression
7.3.2 Condition liée à l’existence d’un symbole
7.3.3 L’opérateur defined
7.3.4 La commande #error
7.3.5 La commande #pragma
8 La programmation modulaire
8.1 Principes élémentaires
8.2 Eviter les erreurs d’inclusions multiples
8.3 La compilation séparée
8.4 Résumé des règles de programmation modulaire
8.5 L’outils make
8.5.1 Principe de base
8.5.2 Création d’un Makefile
8.5.3 Utilisation de macros et de variables
9 La bibliothèque standard
9.1 Diagnostics d’erreurs <assert.h>
9.2 Gestion des nombres complexes <complex.h>
9.3 Classification de caractères et changements de casse <ctype.h>
9.4 Valeur du dernier signal d’erreur <errno.h>
9.5 Gestion d’un environnement à 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 précision des nombres flottants <float.h>
9.7 Définitions de types entiers de taille fixée <inttypes.h>
9.8 Alias d’opérateurs 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 mathématiques de <math.h>
9.11.1 Fonctions trigonométriques 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 paramètres <stdarg.h>
9.15 Définition du type booléen <stdbool.h>
9.16 Définitions standards <stddef.h>
9.17 Définitions de types entiers <stdint.h>
9.18 Entrées-sorties <stdio.h>
9.18.1 Manipulation de fichiers
9.18.2 Entrées et sorties formatées
9.18.3 Impression et lecture de caractères
9.19 Utilitaires divers <stdlib.h>
9.19.1 Allocation dynamique
9.19.2 Conversion de chaines de caractères en nombres
9.19.3 Génération de nombres pseudo-aléatoires
9.19.4 Arithmétique sur les entiers
9.19.5 Recherche et tri
9.19.6 Communication avec l’environnement
9.20 Manipulation de chaınes de caractères <string.h>
9.21 Macros génériques pour les fonctions mathématiques <tgmath.h>
9.22 Date et heure <time.h>
9.23 Manipulation de caractères étendus <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ınée
B Makefile générique
C Le betisier
C.1 Erreur avec les opérateurs
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 déclaration
C.2.2 Un #define n’est pas une initialisation
C.2.3 Erreur sur macro avec paramètres
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 priorités des opérateurs
C.6 Erreur avec l’instruction switch
C.6.1 Oubli du break
C.6.2 Erreur sur le défault
C.7 Erreur sur les tableaux multidimensionnels
C.8 Erreur avec la compilation séparée
C.9 Liens utiles
Extrait du cours langage C gratuit: Avancée
Chapitre 1 Les bases
1.1 Un langage compile
1.1.1 Généralités 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” compréhensibles par le programmeur) par opposition aux langages de bas niveau (de type assembleur) qui sont plus orientés vers le langage machine. Parmi les exemples de langages de haut niveau, on peut citer les langages C, C++, Java, Cobol etc…
Il est néanmoins nécessaire d’opérer une opération de traduction du langage de haut niveau vers le langage machine (binaire). On distingue deux types de traducteurs :
1. l’interpréteur qui traduit les programmes instruction par instruction dans le cadre d’une intéraction continue avec l’utilisateur. Ainsi, le programme est traduit `a chaque exécution.
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 compilé
Le langage C est donc un langage compilé (meme s’il existe des interpréteurs plus ou moins expérimentaux). Ainsi, un programme C est décrit par un fichier texte, appelé fichier source. La compilation se décompose en fait en 4 phases successives
1. Le traitement par le préprocesseur : le fichier source (portant l’extension .c) est analysé par le préprocesseur qui effectue des transformations purement textuelles (remplacement de chaınes de caracteres, inclusion d’autres fichiers sources, compilation conditionnelle …). Les différentes commandes qui peuvent etre fournies au préprocesseur seront expos´ ees dans le chapitre 7.
2. La compilation : la compilation proprement dite traduit le fichier génére par le préprocesseur (d’extension .i) en assembleur, c’est-`a-dire en une suite d’instructions du microprocesseur qui utilisent des mnémoniques rendant la lecture possible.
3. L’assemblage : cette opération transforme le code assembleur (extension .s) en un fichier binaire, c’est-`a-dire en instructions directement comprehensibles par le processeur. Généralement, la compilation et l’assemblage se font dans la foulée, sauf si l’on spécifie explicitement que l’on veut le code assembleur. Le fichier produit par l’assemblage est appelé fichier objet (et porte l’extension .o). Les fichiers objets correspondant aux librairies pré-compilées ont pour suffixe .a.
1.1.3 Notes sur la normalisation du langage C
[KR88], publié 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 référence aux 2 auteurs). Devant la popularité du C, l’American National Standard Institut charge en 1983 le comité X3J11 de standardiser le langage C. Le fruit de ce travail est finalement été approuvé en décembre 1989, le standard ANSI C89 est né. L’International Organization for Standardization a adopté en 1990 ce standard en tant que standard international sous le nom de ISO C90. Ce standard ISO remplace le précédent standard ANSI (C89) meme à l’intèrieur des USA, car rappelons-le, ANSI est une organisation nationale, et non internationale comme l’ISO.
Les standards ISO, en tant que tel, sont sujets à des révisions, notamment en 1995 (C95) et en 99 (on parle alors de C99). Comme on le verra dans la suite, certaines fonctionnalités décrites dans ce document héritent de la norme C99 et n’était pas présentes avant.
1.1.4 C en pratique : compilation et debuggage
Compilation d’un programme C Il existe évidemment un grand nombre de compilateurs C pour chaque plateforme (Windows, Linux, MAC etc…). Le compilateur détaillé dans cette section correspond au compilateur libre gcc, disponible sur quasiment toutes les plateformes UNIX.
……..
Cours langage C gratuit: Avancée (772 KO) (Cours PDF)