Introduction
1 – Premier programme en C
1.1. Respectons la tradition… Bonjour !
1.2. Un premier programme sans entrées/sorties
2 – Un exemple de programme plus évolué
3 – Variables-constantes-affectation
3.1. Les variables en bref
3.2. A quel endroit définir une variable
3.3. Quel nom donner à une variable ?
3.4. Comment créer (définir/déclarer) une variable ?
3.5. Les différents types de variables scalaires : entiers, réels
3.6. Affectation d’une variable (« reçoit »)
3.7. Et si j’ai besoin d’une constante ? Valeurs entières/réelles, #define, const
4 – Opérateurs – Conversions
4.1. Quelles sont les priorités quand on mélange des opérateurs
4.2. Les opérateurs arithmétiques : + – * / % (modulo)
4.3. L’opérateur d’affectation = (« reçoit »)
4.4. Les conversions de type : implicites et explicites (cast)
4.5. Les opérateurs relationnels : inférieur, supérieur, égal, différent…
4.6. Les opérateurs logiques : ET OU NON
4.7. Opérateurs de manipulation de bits – masques (ET bit à bit, décalage
4.8. L’opérateur d’adresse &
4.9. Les opérateurs d’incrémentation et de décrémentation ++ —
4.10. L’opérateur sizeof (taille en octets)
5 – Les structures de contrôle
5.1. Les répétitions : for, while, do…while, continue, break
5.2. Les exécutions conditionnelles : if…else, switch, ?:
6 – Les entrées/sorties conversationnelles (clavier/écran)
6.1. Affichage à l’aide de la fonction printf
6.2. Lecture au clavier à l’aide de la fonction scanf
6.3. D’autres fonctions d’entrées/sorties : getchar, putchar, GetKey…
7 – Utilisation de fonctions
7.1. Un peu de vocabulaire
7.2. Le mode d’emploi d’une fonction : le prototype (ou déclaration)
7.3. L’utilisation de la fonction : l’appel de fonction
7.4. Plus d’informations sur les prototypes de fonction
7.5. Récapitulation : prototypes et appels de fonction en une page
8 – La bibliothèque de fonctions mathématiques (sinus, exp, valeur absolue…)
9 – Définition de fonction
9.1. Pourquoi créer des fonctions dans mon programme
9.2. Dessinons : boîtes noires – découpage fonctionnel du programme
9.3. Premier avertissement : déclaration ≠ définition de fonction
9.4. En détails : définition, déclaration, utilisation d’une fonction
9.5. Quelques exemples de fonctions simples
9.6. Variables locales et variables globales
10 – La compilation séparée (multi-fichiers)
10.1. Fabrication du programme : compilation (préprocesseur), édition de lien
10.2. Conséquences sur l’utilisation de fonctions
10.3. Conséquence sur les variables globales : la déclaration extern
10.4. Exemple de programmation multi-fichiers (sans fic en-tête)
10.5. Ecriture d’un fichier en-tête – Exemple complet
11 – Les tableaux
11.1. Premier exemple de programme avec un tableau
11.2. Définition d’un tableau à une dimension
11.3. Accès aux éléments d’un tableau : tab[i]
11.4. Initialisation d’un tableau, totale ou partielle
11.5. Copie d’un tableau : for ou memmove
11.6. Transmission d’un tableau en paramètre d’une fonction
11.7. Tableau multidimensionnel (matrice, …)
12 – Les chaînes de caractères
12.1. Définition et initialisation d’une chaîne
12.2. Ecriture à l’écran d’une chaîne (utilité : ***)
12.3. Lecture d’une chaîne au clavier
12.4. Quelques fonctions de traitement de chaînes de caractères
12.5. Les tableaux de chaîne de caractères
13 – Les pointeurs
13.1. Définition et affectation d’un pointeur
13.2. Arithmétique des pointeurs
13.3. Application des pointeurs au passage en paramètre
13.4. Application des pointeurs : allocation dynamique malloc, free
13.5. Pointeurs sur une fonction
14 – Pointeurs et tableaux à une dimension
14.1. Relation nom de tableau – pointeur
14.2. Transmission d’un tableau en paramètre d’une fonction
15 – Pointeurs et chaînes de caractères
15.1. Pointeur et constante chaîne de caractères
15.2. Retour sur les tableaux de caractères
15.3. Les tableaux de pointeurs
16 – Les structures
16.1. Modèle de structure
16.2. Définition d’une variable de type structuré
16.3. Initialisation d’une variable structurée
16.4. Accès aux champs d’une variable structurée
16.5. La structure en tant que paramètre
16.6. Bilan sur les ressemblances tableau – variable structurée
16.7. Structures imbriquées
16.8. Listes chaînées : application des pointeurs
16.9. Allocation dynamique de structures
16.10. Un exemple en plusieurs fichiers avec fichier en-tête
17 – Les fichiers
17.1. Contenu d’un fichier binaire et de son équivalent texte
17.2. Ouverture et fermeture d’un fichier : fopen, fclose
17.3. Entrées/sorties en accès binaire
17.4. Entrées/sorties formatées en mode texte
17.5. Lecture en accès binaire d’un fichier texte
17.6. Un fichier d’échange entre programmes : le fichier csv
18 – Les simplifications d’écriture
18.1. Définition de nouveaux noms de types : typedef
18.2. Les types énumérés : enum
19 – Les classes d’allocation mémoire
19.1. Les 3 sortes de variables : fichier, bloc, paramètre formel
19.2. Les variables de fichier
19.3. Les variables de bloc
19.4. Les paramètres formels
19.5. Initialisation d’une variable
19.6. Syntaxe complète d’une définition de variable
19.7. Variables « statiques » et « automatiques »
20 – Etes-vous un « bon » programmeur ?
Annexe A. Table des codes ASCII
Annexe B. Débogage d’un programme
Liste des tableaux et des figures
Index
Introduction
Pourquoi le Langage C ?
Incontournable pour l’informatique industrielle
Autrefois programmables uniquement en Assembleur, les processeurs utilisés en informatique industrielle (microcontrôleurs, DSP) sont à présent tous fournis avec un compilateur C. Le Langage C est « plus proche de l’Assembleur » que d’autres langages, donc convient bien aux applications d’informatique industrielle.
Pour le meilleur et pour le pire
Le Langage C est un langage puissant et permissif : qualités ou défauts selon le niveau du programmeur, ces deux caractéristiques liées n’en font malheureusement pas l’ami des débutants, à qui un cadre plus rigide comme celui du Pascal convient mieux.
Des codes sources portables… ou presque
Le Langage C est portable sous certaines conditions : « portable » signifie qu’un même fichier source peut être compilé avec des compilateurs différents, pratiquement sans modifications. Pour être portable, un fichier source doit être écrit en C normalisé (« C ANSI » ou « ISO »).
C ou C++ ?
Les logiciels de développement en Langage C sur PC sont souvent des logiciels de C++ (Langage C « Orienté Objet »). Mais ils conviennent parfaitement pour faire du « C pur » : le C++ contient un noyau de C et des couches supplémentaires pour programmer en « Orienté Objet » (« ++ »). Nous ne parlerons ici que de C.
Les bonus : débogueur et règles de style
Outre la présentation du Langage C proprement dit, vous trouverez en annexe dans ce document les commandes de base du « débogueur« . Cet outil pratique et très simple à utiliser nous aide à trouver les erreurs lors de l’exécution du programme : exécution pas à pas, visualisation des variables…(debug)
Les commandes de debug, qu’on retrouve dans tous les logiciels de développement (sous des noms parfois un peu différents), sont rapidement indispensables quand la taille du programme augmente… mais aussi quand on veut éviter de fastidieuses entrées/sorties au début des tests (lecture du clavier, affichage à l’écran).
Ce document pour qui ?
J’enseigne dans les domaines de l’électronique et de l’informatique industrielle à l’IUT de Cachan. L’approche de ce document est donc parfois celle de l’« électronicien / informaticien industriel », qui navigue entre PC et microcontrôleurs sous des environnements variés, plutôt que celle de l’« informaticien pur », qui ne programme que sur PC ou équivalent.
Par exemple, le type entier int sera en général remplacé par un type dérivé plus précis comme short ou long int (car int n’a en général pas la même taille sur un PC et sur un microcontrôleur). Certains chapitres, comme les opérateurs de manipulation de bit très utiles en Informatique Industrielle, sont très développés.
Cette approche « Informatique Industrielle », parfois plus exigeante, est tout à fait compatible avec celle de l’informaticien pur.
Les symboles de ce document
Les remarques, les règles de style et les points dangereux seront signalés par les symboles suivants :
F Ceci est une remarque
Ceci est une règle de style : elle n’est pas obligatoire pour le compilateur, mais il faut suivre cette règle pour écrire un beau programme, lisible et évolutif.
M Ceci est un point dangereux
J’ai besoin d’un environnement de développement en C !
De nombreux environnements intégrés gratuits sont téléchargeables sur Internet, comme CodeBlocks ou DevCPP. On peut leur adjoindre des bibliothèques spécifiques, comme SDL pour le graphisme.
Les programmes de ce document ont été écrits sous CVI, un excellent IDE de National Instruments (payant).
Référence du langage C (2.17 MO) (Cours PDF)