Série 2 niveau 0
Transcription
Série 2 niveau 0
Série 2 niveau 0: Exercice 1.2 : écrire mon premier programme avec Geany Les codes sources des programmes C sont, à l'instar de la plupart des langages de programmation, de simples fichiers texte. A priori n'importe quel éditeur de textes permettrait d'écrire un programme en C, cependant il est tout à fait déconseillé d'utiliser les éditeurs de texte "bureautique" car ils introduisent des caractères supplémentaires de formatage qui ne sont pas acceptés par le langage C. Nous vous proposons d'utiliser Geany, un éditeur open-source. L'un des avantages de Geany est qu'il adopte certaines conventions communes aux éditeurs de textes bureautiques, comme les fameuses commandes Ctrl-C pour Copier et Ctrl-V pour Coller, ce qui de nos jours est un must. De plus il possède un mode C agréable (il présente les programmes avec une mise en page et une coloration adaptées ; on appelle cela la mise en évidence syntaxique). Le but de cet exercice est justement de vous apprendre, pas à pas, à éditer un programme ; compiler un programme C; corriger les erreurs de compilation. Étape 1 : Éditer un programme Geany offre la coloration syntaxique et la possibilité d'accéder facilement au code à partir des messages d'erreur (double clic). Note: Lorsque vous ouvrez un fichier dont le nom finit par .c, geany passe automatiquement en mode C, et l'affiche dans la barre horizontale au bas de la fenêtre d'édition. Geany crée automatiquement les fichiers qu'on lui demande de sauvegarder lorsque ceux-ci n'existent pas encore Tapez le programme suivant, à sauvegarder sous le nom helloworld.c : #include <stdlib.h> #include <stdio.h> int main() { printf("HelloWorld\n"); return EXIT_SUCCESS; } Nous verrons plus tard dans le cours à quoi correspondent exactement toutes ces lignes, mais pour l'instant considérez cela comme la base minimale pour que votre programme fonctionne. Constatations : Certains mots apparaissent en couleur. Il s'agit de mots ayant des fonctions syntaxiques particulières, et leur couleur peut améliorer la lisibilité des programmes. Si ce n'est pas le cas, votre nom de fichier n'a probablement pas l'extension .c ; renommez votre fichier correctement. Si ce n'est pas encore fait, nous vous demandons d'activer Document -> Auto-indentation. La ligne sur laquelle se trouve le curseur est indentée automatiquement (= décalée), c'est-à-dire que des espaces sont ajoutés ou supprimés en début de ligne, de façon à rendre le programme plus lisible. Le nombre d'espaces ajoutés correspond à un certain style d'indentation (cf style recommandé dans les conventions). Si vous n'utilisez pas le style recommandé parce que vous êtes habitués à un autre style il n'y a pas de problème ; l'important est de garder le même style pour tous vos programmes futurs. Nous vous demandons de toujours utiliser l'indentation automatique car cette option permet de mieux visualiser la structure du flot de contrôle du programme (bloc conditionnels ou répétés). L'avantage de geany est de montrer la taille des blocs dans la marge, à droite du numéro de ligne. On peut aussi réduire un bloc entier à une seule ligne en cliquant sur le symbole "-" à coté de l'accolade ouvrante. Réciproquement le bloc est restitué en appuyant sur le symbole "+". Pendant que vous tapez votre code, il y a des messages qui s'affichent automatiquement comme illustré dans l'exemple ci-dessous: Geany contient une "auto-completion". Pendant vous tapez votre code, geany essaie de deviner quelle fonctions ou variables vous voulez utiliser et vous propose une liste avec ces fonctions et variables. Vous pouvez choisir la fonction/variable appropriée. Cela vous permet de gagner du temps et de diminuer le nombre de fautes de frappe, sources de nombreuses erreurs de programmation. Si vous choisissez une fonction, geany vous affiche la liste des arguments pour cette fonction. Sauvegardez le programme (Ctrl+S ou via le menu File -> Save). Annexe : structure du programme La ligne 1 (#include ) ordonne au compilateur de lire (et d'inclure) le contenu de la bibliothèque stdlib avant de compiler le programme. Cette bibliothèque contient des déclarations de fonctions (et/ou variables) utilisées dans la suite du programme. Dans notre cas, il s'agit de la définition du symbole EXIT_SUCCESS. La ligne 2 (#include ) ordonne au compilateur de lire (et d'inclure) le contenu de la bibliothèque stdio avant de compiler le programme. Cette bibliothèque contient des déclarations de fonctions (et/ou variables) utilisées dans la suite du programme. Dans notre cas, il s'agit de la définition de la fonction printf(...). La ligne 4 indique le début de la fonction principale du programme. Les instructions comprises entre l'accolade ouvrante { et l'accolade fermante associée } constituent la définition du programme principal (la fonction main), c'est-à-dire les instructions qui seront effectivement exécutées au lancement du programme. La ligne 6 affiche «HelloWorld» à l'écran, suivi d'un passage à la ligne (\n). La ligne 8 indique que l'on quitte le programme sans avoir rencontré d'erreur, il a accompli la tâche demandée. Étape 2 : compiler le programme Avant d'être exécuté, un programme C doit être compilé : le fichier texte contenant le code source doit être traduit en langage machine. On effectue cette opération à l'aide d'une commande de compilation qui peut être tapée dans une fenêtre Terminal, ou être exécuté depuis geany, comme nous vous le proposons dans cet exercice. Avec la souris, cliquez sur Build -> Build (touche F9). Si vous n'avez pas sauvegardé le fichier, geany vous demande alors l'autorisation de le faire maintenant (appuyez sur y pour confirmer). Une nouvelle fenêtre s'ouvre en deux, la fenêtre en bas montre les messages de compilation. Attendez jusqu'à voir apparaître un message indiquant la fin de la compilation. Si la compilation s'est déroulée sans problème (elle se termine avec le message «Compilation finished successfully»), testez votre programme : Soit en utilisant un terminal, déplacez-vous (cd) si besoin est dans le répertoire ~/serie2 et lancez votre programme en tapant (suivi de Return) ./helloworld Le message «HelloWorld» devrait alors apparaître. Soit en cliquant sur le bouton (« Execute » - touche F5) Une nouvelle fenêtre devrait alors apparaître: Remarques: On peut modifier les paramètres de la compilation/build via le menu Build -> Set Build Commands Le bouton "Compile" (menu Build -> Compile) produit seulement le code objet sans aller jusqu'à créer le fichier exécutable. Pour obtenir le code exécutable, il faut toujours faire un "Build -> Build" (touche F9). Si vous avez modifié votre code, il faut d'abord faire un « Build » qui va créer le nouvel exécutable, et ensuite seulement faire « Execute ». Étape 3 : erreurs de compilation Nous allons maintenant nous intéresser à la correction des erreurs d'un programme, en tout cas celles que le compilateur peut détecter. Cela vous arrivera souvent, et le compilateur C est assez fort pour trouver des erreurs. Apprenez donc à les comprendre et si vous avez du mal, n'hésitez pas à utiliser le forum ! Il existe divers types d'erreurs (BugCheckList) : Les erreurs de syntaxe: le programme est mal écrit et le compilateur ne le comprend pas. Le compilateur signale toujours le problème, en indiquant souvent l'endroit de l'erreur. les erreurs sémantiques: la syntaxe du programme est correcte (il compile et produit un exécutable), mais ce qu'il fait est erroné. Voici trois familles d'erreurs sémantiques : o o o Les erreurs d'implémentation : par exemple une division par zéro se produit, ou une variable n'a pas été initialisée correctement. Ce type d'erreurs ne se détecte que lors des tests du programme (soit par un arrêt intempestif (cas de la division par zéro), soit par des résultats erronés (cas de la mauvaise initialisation). Les erreurs d'algorithme : l'algorithme implémenté ne fait pas ce que l'on croit (ce qu'il devrait) Ce type d'erreur est en fait assez proche du précédent. Cependant, c'est plus la méthode globale qui est erronée, alors que dans le cas précédent, l'erreur provient le plus souvent d'une étourderie ou d'un manque de précision dans une des étapes du codage de l'algorithme. Les erreurs de conceptions : ici c'est carrément l'approche du problème qui est erronée, souvent en raison d'hypothèses trop fortes ou d'hypothèse non explicitées. Ces erreurs relèvent du domaine de l'ingénierie informatique (le «génie logiciel»), on y reviendra au second semestre. Nous n'aborderons aujourd’hui que les erreurs de syntaxe. Les erreurs d'implémentation et d'algorithme seront étudiées plus tard dans le cours, d'un point de vue pratique avec la mise en oeuvre de procédures de déverminage - i.e. utilisation de débogueur et de tests logiciels. D'ici là reportez vous au document Bug Check List en cas de fonctionnement incorrect de votre programme et essayez de retrouver les symptômes correspondant le mieux à votre problème. Pour commencer, introduisez volontairement une erreur de syntaxe dans votre programme (supprimez par exemple la dernière accolade ou le dernier point-virgule). Relancez ensuite la compilation. Vous devriez obtenir un message indiquant le fichier où se trouve l'erreur (helloworld.c), la ligne concernée, ainsi que le type d'erreur: Par exemple, s'il manque la dernière accolade, le compilateur vous indiquera le message suivant : helloworld.c:8:4: error: expected declaration or statement at end of input Compilation failed. Cliquez avec le bouton du gauche de la souris sur le message d'erreur: geany positionne alors une flèche sur le fichier et la ligne concernés. Corrigez l'erreur, et relancez la compilation.