La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

GEF 243B Programmation informatique appliquée Définition de types, types énumérés et structures §Apx J, 12.1 – 12.2.

Présentations similaires


Présentation au sujet: "GEF 243B Programmation informatique appliquée Définition de types, types énumérés et structures §Apx J, 12.1 – 12.2."— Transcription de la présentation:

1 GEF 243B Programmation informatique appliquée Définition de types, types énumérés et structures §Apx J, 12.1 – 12.2

2 21-Jan-14 2 JGA Beaulieu Revue Comment est-ce que le nom dune fonction est similaire au nom dun tableau? Je veux déclarer une variable pointeur nommée: fpChar qui pointe à une fonction qui retourne un pointeur à char et prend deux pointeurs à char comme paramètres. Écrivez votre déclaration ici:

3 21-Jan-14 3 JGA Beaulieu Synopsis Limitation spatiale – Portée (scope) Limitation temporelle – Durée (extent) Classe de stockage statique (static) La définition de type typedef Les types énumérés Définition de type énuméré

4 21-Jan-14 4 JGA Beaulieu Limitation spatiale – portée ( scope ) Nous avons parlé de variables globales et locales au paravent Ces deux termes réfèrent à la portée dune variable ou sa limitation spatiale La portée dune variable détermine sa visibilité dans lespace Où vous pouvez voir et utiliser une variable La porté dune variable devrait être la plus petite possible pour être utile: Si une variable nest pas requise en dehors du bloc, ne la rendez pas visible en dehors du bloc.

5 21-Jan-14 5 JGA Beaulieu Limitation spatiale – portée ( scope ) La fonction main contient un bloc primaire. Si une variable est déclaré pardessus ce bloc primaire, alors elle est à la portée de toute lunité de compilation. Elle est même à la portée de toute autre unité de compilation qui sait quelle existe!!! Ne faite pas cela. Ces variables sont vraiment globales!! Seulement les définitions de type structure et les définitions de type énuméré devraient être globale à lunité de compilation. Pas les variables.

6 21-Jan-14 6 JGA Beaulieu Portée - Exemple int array[7] = {21, 43, 8, 99, 12};// Portée de array int max(int x, int y) { return (x>y? x: y); }// Portée de Max int main(void) { int temp;// Portée de temp static int callCount;// Portée de callCount double* newD;// Portée de newD; } Quelle est la portée des variables et fonctions suivantes?

7 21-Jan-14 7 JGA Beaulieu Limitation temporelle – Durée ( extent ) Donc nous savons ce quest la portée; la limitation spatiale dune variable; son territoire. Et le temps de vie de la variable lui? La limitation temporelle dune variable ou sa durée détermine quand une variable prend vie, quelle peut être utilisée et quand elle meurt.

8 21-Jan-14 8 JGA Beaulieu Limitation temporelle – Durée ( extent ) Les variables existent typiquement pour la durée de lappel de fonction Quand la fonction est appelée, un nouvel espace est créé sur la pile du programme pour ses variables Les variable sont utilisées durant lexécution de la fonction Au retour de la fonction, lespace où ces variables étaient stockées est libéré (le pointeur de pile remonte) et les variables cessent dexister Au prochain appel, les variables sont recréées sur la pile (écrasent les anciennes valeurs)

9 21-Jan-14 9 JGA Beaulieu Limitation temporelle – Durée ( extent ) En déclarant une variable comme static à lintérieur dune fonction, la variable est mise sur le segment de données Elle va sauvegarder la valeur entre les exécutions de la fonction La variable va seulement mourir à la terminaison du programme Une variable statique peut être initialisée où elle est déclarée. Elle sera seulement initialisée une fois. Si vous ninitialisez pas une variable statique sa valeur initiale est zéro.

10 21-Jan JGA Beaulieu Limitation temporelle – Durée ( extent ) Une variable statique est déclarée comme suit: … int Fctn (void) { static int unInt = 0; //init une fois seulement return unInt++; //Ceci va garder le compte //du nombre de fois que la //fonction est appelée. }

11 21-Jan JGA Beaulieu Limitation temporelle – Durée ( extent ) Notez que même si la durée de la variable change en utilisant le mot clé static, la portée ne change pas! La variable peut seulement être utilisée dans la fonction.

12 21-Jan JGA Beaulieu Portée et durée static est une classe de stockage Jusquà date, toutes vos variables ont étés dans la classe de stockage auto ; vous navez jamais utilisés ce mot clé parce que cest la classe par défaut Il y a deux autres classes de stockage ( extern et register ) mais nous nétudieront pas ceci dans le cours

13 21-Jan JGA Beaulieu Durée - Exemple int array[7] = {21, 43, 8, 99, 12}; // Durée de array int max(int x, int y) { return (x>y? x: y); } // Durée de Max int main(void) { int temp;// Durée de temp double *newD;// Durée de newD; } int myFunction (void) { static int callCount;// Durée de }// callCount Quelle est la durée des variables et fonctions?

14 21-Jan JGA Beaulieu Structures et types dérivés Jusquà date nous avons vue une structure de données: le tableau. Un tableau a trois caractéristiques: Nom, type et un nombre fixe déléments Une fois déclaré, le tableau peut seulement contenir des éléments du même type. Nous avons aussi vue deux types dérivés: le tableau et le pointeur. Ces types sont dérivés parce que ils change les valeurs quune variable peut prendre et les opérations définies pour le type de base.

15 21-Jan JGA Beaulieu Définition de type Les définitions de type ( typedef ) sont centrales pour créer des nouveaux types en C Avec typedef vous pouvez créer un nouveau type à partir dautres types Standards ou dérivés Nous allons voir plus tard aujourdhui comment typedef nous aide à définir des types de données complexes Mais nous commençons avec deux exemples simples

16 21-Jan JGA Beaulieu Définition de type Vous définissez un nouveau type avec le format de définition de typedef : typedef type IDENTIFICATEUR; Mot clé Tout type de base ou dérivé Normalement en majuscules

17 21-Jan JGA Beaulieu Définition de type Même si ce nest PAS recommandé, vous pourriez définir nouveau type à partir de int en faisant ce qui suit: typedef int INTEGER; Les deux déclarations qui suivent seraient donc équivalentes: int nombre; INTEGER nombre;

18 21-Jan JGA Beaulieu Définition de type Ce qui se fait assez souvent par les programmeurs en C, est dutiliser typedef pour définir un nouveau type appelé STRING à partir du type pointeur à caractère ( char*) : typedef char* STRING; … STRING maString;//un pointeur à char Ceci ferait la même chose que: char* myString;

19 21-Jan JGA Beaulieu Définition de type Les deux derniers exemples sont simples, mais ils montrent la flexibilité que C a pour définir de nouveaux types Dans la syntaxe du langage, nimporte quelle place où vous pouvez placer le nom dun type standard, vous pouvez utiliser le nom dune définition de type. Vous pouvez utiliser les définitions de types dans les déclarations de variables Déclaration de type de fonctions Déclaration de paramètres Opérations de casting,…

20 21-Jan JGA Beaulieu Types énumérés Le type énuméré, enum construit par-dessus le type int Dans un type énuméré, chaque valeur integer est associée avec un identificateur appelé constante dénumération Vous avez déjà vue et utilisé quelques types énumérés: MOTORDIRECTION – OFF, FWD, REV MOTORPORT – LEFT_MOTOR, RIGHT_MOTOR BOTH_MOTORS

21 21-Jan JGA Beaulieu Types énumérés Il y a deux façons de base pour déclarer un type énuméré, mais nous montrons seulement la méthode préférée: //Lénumération propre enum TAG {constantes dénumération}; //Déclaration dune variable pour enum enum TAG identificateurDeVar;

22 21-Jan JGA Beaulieu Types énumérés - exemple Par exemple si je veux créer un type énumérer pour les mois de lannée, je pourrais faire ceci: enum MOIS {JAN, FEV, MAR, AVR, MAI, JUN, JUL, AOU, SEP, OCT, NOV, DEC}; enum MOIS moisDeNaissance; //déclaration enum MOIS moisDeGrad = MAI;

23 21-Jan JGA Beaulieu Types énumérés Notez que parce que les structures de données en C sont basées sur zéro, la valeur du premier élément dans lénumération est 0 donc JAN = 0 Mais on peut le faire explicitement: enum MOIS {JAN = 1, FEV = 2,…}; Si je spécifie seulement la première valeur, le compilateur remplit les prochaines valeurs en additionnant un à chaque item. enum MOIS {JAN = 1, FEV, MAR, AVR,…};

24 21-Jan JGA Beaulieu Types énumérés Deux mises en garde avec les types énumérés. C permet à deux constantes dénumération davoir la même valeur!! Ceci nest pas une bonne pratique. enum GRANDEURS {PETIT = 1, GROS = 2, TRES_GROS = 2}; Il ny a pas de vérification pour la plage des valeurs dun type énuméré assigné à une variable: enum GRANDEUR maGrand = 4; //Warning du compilateur

25 21-Jan JGA Beaulieu Définition de type énuméré Chaque fois que vous déclarez une nouvelle variable pour votre type énuméré, vous devez utiliser le mot clé enum : enum MOIS moisDeNaissance; Nous avons appris plus tôt aujourdhui que nous pouvons renommer un type à quelque chose dautre; voir plus simple en utilisant typedef

26 21-Jan JGA Beaulieu Énumération de type définit Ici nous combinons tout simplement les deux mots clé typedef et enum : typedef enum {ROUGE, BLEUE, JAUNE} COULEURPRIM ; COULEURPRIM premiereCouleur = ROUGE; COULEURPRIM deuxiemeCouleur = JAUNE;

27 21-Jan JGA Beaulieu Quiz Time Définissez un type énuméré pour les transmissions (manuelle, automatique) Définissez une énumération de type définit pour la couleur dune auto


Télécharger ppt "GEF 243B Programmation informatique appliquée Définition de types, types énumérés et structures §Apx J, 12.1 – 12.2."

Présentations similaires


Annonces Google