2 - Un exemple de programme plus évolué

Icône de l'outil pédagogique Un exemple de programme plus évolué

La programmation moderne est une programmation MODULAIRE, c'est‐à‐dire composée de modules (sous-programmes) appelés fonctions par le Langage C.
Nous avons vu qu'il existe toujours au moins une fonction principale appelée main. En pratique, un "bon" programme (c'est‐à‐dire suffisamment modulaire) comporte de nombreuses fonctions qui dépassent
rarement une dizaine de lignes. C'est pourquoi ce chapitre se propose de vous présenter un exemple de programme modulaire avec plusieurs fonctions.

En fait, cet exemple a des objectifs multiples, puisqu'il est destiné à :
- vous présenter la modularité, avec le découpage du programme en fonctions ;
- vous habituer à la forme générale d'un programme en C ;
- vous permettre de situer l'emplacement des instructions détaillées dans les chapitres suivants.
Cet exemple est une version simple du calcul des racines réelles d'un polynôme du second degré ; les coefficients de l’équation sont réels et imposés.

Ne vous inquiétez pas si vous ne comprenez pas tout, cela viendra en temps utile...

Outre la manipulation de fonctions, ce programme simple fait apparaître la nécessité de créer des données (variables et constantes) qu'on manipule à l'aide d'opérateurs et d'instructions de contrôle.
Des blocs d'instructions sont isolés sous forme de fonctions (= sous‐programme en Langage C) afin d’obtenir une programmation modulaire. Toutes ces notions seront développées dans les chapitres qui suivent.

Ce programme peut bien sûr être amélioré : séparation complète du calcul et des affichage, gestion complète du cas delta<0, test des coefficients pour détecter les cas particuliers tels que a=0, etc... Mais un programme "complet" serait trop "effrayant" dans le cadre de cet exemple d'introduction !

Notez bien la structure générale de ce programme :

- les insertions de fichiers en‐tête (#include) et les constantes symboliques (#define) figurent en début de fichier : ce sont des directives destinées au préprocesseur, repérables grâce au caractère # qui les commence (et par l'absence de point‐virgule : ce ne sont pas des instructions). Pour plus d'informations sur le préprocesseur et sur les étapes du développement d'un programme en C, on peut se reporter au début du chapitre "La compilation séparée".

- derrière les directives apparaissent les prototypes (modes d’emploi) des fonctions utilisées qui sont définies par le programmeur. Les prototypes des fonctions fournies par le Langage C, quant à elles, sont contenues dans les fichiers en‐tête insérés par #include.

Les prototypes de fonction permettent au compilateur de vérifier la bonne utilisation des fonctions (nombre et type des paramètres), ainsi que d'effectuer les éventuelles conversions nécessaires. Les prototypes sont indispensables et leur absence provoque normalement une erreur de compilation ("Function should have a prototype" ou équivalent) ou une proposition d'insertion faite par le compilateur (environnement CVI).

- Ensuite seulement viennent les instructions exécutables, situées à l'intérieur des fonctions. La fonction main a été placée en première position parce que c'est sa place logique. Mais le compilateur ne l'exige pas : si tous les prototypes de fonction sont présents en début de fichier, l'ordre d'apparition des définitions de fonction est quelconque.

Ce court programme est destiné à vous familiariser avec la structure générale d'un fichier source C. Les chapitres qui suivent vont expliquer en détail :
– comment définir des variables simples ou composées
– comment effectuer des actions sur ces variables (opérateurs)
– comment regrouper des blocs d'instructions sous forme de fonctions
– etc ...