GEF 243B Programmation informatique appliquée Structure de base des programmes en C §2.1 - 2.2 §Apx H
Synopsis Outils requis pour programmer en C main() Programme simple en C Arguments de la ligne de commande (argc, argv) Commentaires Conventions de nommage JGA Beaulieu
Outils pour programmer en C Vous avez besoin d’un éditeur de texte pour créer et modifier votre code Ici vous créez/modifiez des fichiers *.c et *.h Vous avez besoin d’un compilateur, qui est dépendant de votre plateforme Intel/Win, Sun SPARC/Unix… Ici vous produisez des fichiers *.obj Vous avez besoin d’un éditeur de liens (linker) Ici vous produisez des fichiers *.exe (ou .lx) Un environnement pour exécuter vos programmes Dans les labos on se sert de CodeWarrior et de MicroC/OS-II JGA Beaulieu
Étapes pour produire un programme en C Figure 1-9 Here we should mention that there are IDEs that hide the steps to produce a program by the single click of a button. But that we believe that it is important to understand the steps involved in the creation of a program to remove the shroud of secrecy. There is actually many steps in the compilation of a program but we will not get into this aspect of programming. The only language a computer understands is machine specific language. Each computer has its own set of machine instructions which at the lowest level are represented by a string of 0s and 1s. In order for the computer to understand a program written in high-level language such as C, it must be compiled for the target machine to understand the instructions. The compilation transforms the syntax and semantics of a program into strings of 0s and 1s. Reuse is a significant topic in S/W engineering. Libraries form one of the most common form or code reuse that is available. When a user calls a C library function, it needs to be linked to the program in order to be used. More could be said, but that should be enough to indicate why the various steps. JGA Beaulieu
Structure d’un programme en C Tout les programmes en C doivent contenir au moins une fonction Cette fonction est la fonction main() Il peut seulement y avoir une fonction qui s’appel main() Contrairement à Java où chaque classe peut avoir un main JGA Beaulieu
Structure d’un programme en C Tout les programmes en C sont écrits avec une structure bien définit: /*Directives de pré processeur*/ /*Déclaration des variables Globales*/ void main(void) { /*Déclaration des variables locales*/ /*Énoncés*/ } Explain that main is a function so it has a type. Here we say void, but the void can be left off. Il est important de comprendre que les variables ne peuvent pas être déclarées après que les énoncés sont commencés. JGA Beaulieu
Structure d’un programme en C /*Directives de pré processeur */ #include <stdio.h> void main(void) { int x,y,z; /*Déclaration variables locales */ x = 2; /*Énoncés*/ y = 3; z = x * y; printf(“Voici la valeur de z: %d”, z); } All preprocessor directives start with the pound sign # In this case here, stdio.h is a file that contains the definitions for the basic IO functions Here we did not include global variables, we will comeback to this type of variables later in the course As can be seen, the main() function is declared (here we use void as the return type) In this example there is no parameters (or arguments) The opening and closing curly brackets form a block, we will see what a block is in the next few classes. There are three variables that are declared here x,y,z. All variable declaration are on the same line, but they can be put on separate lines. It is actually good practice to declare each variable on its own line and to include a comment on the meaning and use of the variable. There are then three assignment statements and a function call statement to the printf function. This is not only for the main function, every function in C has two sections, a declaration or definition section and a statement section. JGA Beaulieu
Arguments de la ligne de commande Comme nous avons vue dans le programme échantillon, nous pouvons figer les valeurs dans le code (hardcode) en prédéfinissant des valeurs. Ceci n’est pas très flexible, nous pourrions utiliser des entrées de l’utilisateur Nous pouvons aussi passer des arguments au programme. Ces arguments qui sont passés au programme au départ seront passé comme paramètres à la fonction main(). JGA Beaulieu
Arguments de la ligne de commande Un programme en C peut avoir aucun arguments void main (void) Ou exactement deux arguments void main (int argc, char *argv[]) int argc est un entier (integer) qui indique le nombre d’éléments (compteur) dans le vecteur d’arguments (argv) The programmer can use any name he wants for the two arguments, but it is traditional to use argc and argv Forouzan p. 836 Now you will notice that little star before argv, and the square brackets after, do not worry about that for now we will get to that. It is also possible to have other arguments for the main function but these are less common: void main (int argc) Is actually a valid definition in addition to: void main(void) void main(int argc, char **argv) JGA Beaulieu
Arguments de la ligne de commande Nom du programme /0 /0 /0 6 /0 argc /0 The first element in argv is always the program name. Each other element is a string separated by a space. If you want to enter a string with spaces included, you must enclose it within quotes /0 argv JGA Beaulieu
Arguments de la ligne de commande Donc même si un programme en C a seulement deux arguments, il en a beaucoup plus!!! Regardons maintenant un exemple de Forouzan et Gilbert The concept here is to show them the use of the command line arguments, tell them not to worry about the details of the code, but to understand how arguments are passed (similar to Java) JGA Beaulieu
Arguments de la ligne de commande #include <stdio.h> #include <string.h> #include <stdlib.h> int main (int argc, char *argv[]) { /* Définitions locales */ int i; /* Énoncés */ printf ("Le nombre d’éléments de l’utilisateur: %d\n", argc); printf ("Le nom du programme: %s\n", argv[0]); for ( i = 1 ; i < argc ; i++ ) printf ("Valeur de l’utilisateur No. %d: %s\n", i, argv[i]); return 0; } Comme nous avons vue deux arguments argc est définit par l’entrée sur la ligne argc peut être utilisé pour contrôler les boucles Forouzan p 836 JGA Beaulieu
Arguments de la ligne de commande #include <stdio.h> #include <stdlib.h> int main (int argc, char *argv[]) { /* Définitions locales */ int i; /* Énoncés */ printf ("Le nombre d’éléments de l’utilisateur: %d\n", argc); printf ("Le nom du programme: %s\n", argv[0]); for ( i = 1 ; i < argc ; i++ ) printf ("Valeur de l’utilisateur No. %d: %s\n", i, argv[i]); system("PAUSE"); return 0; } Forouzan p 836 argv est un tableau d’éléments JGA Beaulieu
Arguments de la ligne de commande En regardant le segment de code la ligne d’entrée va produire la sortie correspondante : C:\cmdline Bozo Le nombre d’éléments de l’utilisateur: 2 Le nom du programme: CMDLINE Valeur de l’utilisateur No. 1: Bozo The first element in the argv table is provided by the system. Tell them about tables being 0 based. JGA Beaulieu
Arguments de la ligne de commande Deuxième exemple avec une string: C:\cmdline Bozo “the clown” Le nombre d’éléments de l’utilisateur: 3 Le nom du programme: CMDLINE Valeur de l’utilisateur No. 1: Bozo Valeur de l’utilisateur No. 2: the clown The first element in the argv table is provided by the system JGA Beaulieu
Commentaires Pendant les travaux pratiques, vous allez souvent avoir du code qui contient des commentaires. Vous devez commenter le nouveau code que vous produisez et tout changements que vous faite au code qui existe déjà. Les commentaires doivent décrire l’intention d’un énoncé ou bloque d’énoncés. Ne mettez pas des commentaires inutiles comme: X = 5; /* ici X est mit à 5*/ Faites des commentaires comme: X = 5; /*Ici X est initialisé au nombre maximum d’éléments*/ Comments in the code should always reflect the intent. Why are we using comments in high order languages? Because during code inspection, the intent of a block of code may not match with the actual instructions contained in the block. Also some instructions may be obscure. Another reason to put comments in the code, is to track the modifications made during the life of the program and to provide justifications for changing a module. You can tell them that in this case, the constant 5 should be declared as a constant instead of using a literal number. JGA Beaulieu
Commentaires Chaque programme ou fonction doit avoir un entête qui ressemble à cela: /************************************************************************* * * Fichier: MonProgramme.c * Auteur: Maj Beaulieu (avec l’aide du code de Forouzan) * Description: Ce programme va écrire Bonjour le monde sur l’unité de contrôle du robot * LEGO Mindstorms. * Historique de révision: Créé 1 janvier 2005 * Modifié 10 jan 2005 par Elof Tremblay pour lab 1 * Elof Meilleur m’a aidé avec la deuxième partie ************************************************************************/ Note: engineers never work in isolation (unless you have no friends). Do not cut and paste or copy blindly. Note that if someone else helps you give them the credit. This is reinforcing the first lesson about plagiarism. It should be noted that you can use // for comments instead of */ /* I personally prefer // and will just let the students know that "real" c won't allow //, but brickOS does! Les étudiants peuvent mettre leurs commentaires dans la langue qu’ils préfèrent. JGA Beaulieu
Convention de nommage Tout les identificateurs (constantes, variables et noms de fonction) devraient avoir des noms qui veulent dire quelque chose. A..Z, a..z, 0..9 et le soulignement (_) sont des caractères valides Ne commencez pas avec un chiffre ou un soulignement ANSI/ISO C a 31 caractères par identificateurs; le reste est ignoré. Donc si vous avez deux identificateurs qui ont 32 caractères et que seulement le dernier diffère, les deux identificateurs sont égaux!!! There are several naming conventions in the world. One such convention is the Hungarian notation created by Charles Simonyi. In this course we will use a simple naming convention that help you quickly identify constants, variable names and function names. Make sure that the variable name must be meaningful. There is enough memory on today’s computers not to use variable names such as a, b, … Following P.30 in Forouzan Any identifier in ANSI/ISO C allows 31 characters per variable: A..Z, a..z, 0..9, _ Identifiers should not start with a _ because these are normally used by C libraries. Prevent duplication of variables Variables cannot be a reserved word (language keywords Appendix B in Forouzan) Also Note that C is case sensitive so TRUE != True != true JGA Beaulieu
Convention de nommage Toutes les constantes doivent être en majuscules #define GRANDMAXSTRG 20 /*Grandeur maximum d’une string*/ Variables doivent commencer avec une lettre minuscule et chaque nouveau mot commence avec une majuscule char *nomDuClient; /*Nom du client ou contact*/ Les noms de fonctions commencent avec une lettre majuscule et chaque nouveau mot commence avec une majuscule int MultiplieDeuxInt (int premierInt, int deuxiemeInt) {…} JGA Beaulieu
Quiz Time Quelles sont les quatre outils que vous avez besoin pour créer un programme? JGA Beaulieu