C.

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Premier programme en C :
La boucle for : init7.c et init71.c
Rappels C.
Développement logiciel sur micro-contrôleurs PIC en C
Sémantique des déclarations pour le langage Z minimal
C++ 6ème cours Patrick Reuter maître de conférences
3- Déclaration et accès aux objets
Paramètres et pointeurs
Structures et unions types énumérés Qu'est-ce qu'une structure
Les pointeurs Manipulation d'adresses et de ce qui est contenu dans ces adresses Très important, fondamental même en C mauvaise réputation : 'dur à comprendre',
Introduction : Compilation et Traduction
FLSI602 Génie Informatique et Réseaux
FLSI602 Génie Informatique et Réseaux
Les sous-programmes Chapitre n° 5: Objectifs : Activité:
Principes de programmation (suite)
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Récursivité.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Structures de données IFT-2000
Structures de données IFT-2000
Sixième cours Les chaînes de caractères et le passage de paramètres par référence Passage de paramètres par référence String.h.
Points importants de la semaine Le préprocesseur. La conversion de types. Les fonctions.
Points importants de la semaine Les constantes de compilation. Les fonctions.
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
IFT 6800 Atelier en Technologies d’information
8PRO100 Éléments de programmation Les types composés.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 6. Gestion des erreurs et des exceptions : Fonctionnement.
Structures de données IFT-2000
Procédures et fonctions
Types de données fondamentaux
Structures des données
2.1 - Historique Chapitre 2 : Introduction au langage C++
Le langage C Rappel Pointeurs & Allocation de mémoire.
9ième Classe (Mardi, 4 novembre) CSI2572. H Nous avons vu comment utiliser les directives #define #ifndef #endif Pour s’assurer de l’inclusion unique.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
La notion de type revisitée en POO
Les adresses des fonctions
ALGORITHMIQUE ET PROGRAMMATION C
Argc et argv Utilisation des paramètres de la ligne de commande.
Autres éléments du langage
Un survol du language C.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
Tutorat en bio-informatique
Introduction au langage C Fonctions et Procédures
Sémantique des instructions pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Les types composés Les enregistrements.
Les surcharges d'opérateurs
ISBN Chapitre 10 L'implémentation des sous- programmes.
Le Préprocesseur. Sujets abordés: Préprocesseur –Qu’est ce? –Qu’est ce qu’une directive? Les macros –Les définir, les redéfinir, les dé-définir –Les macros.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Conception de Programmes - IUT de Paris - 1ère année Quelques éléments du langage C++ Les références La surcharge de fonctions Les fonctions «
8PRO107 Éléments de programmation Les adresses et les pointeurs.
C++ BY AURÉLIEN MODULO MARION. PLAN DES TROIS PRÉSENTATIONS C++ avancé C++ orienté objet Bases de C++
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
Transcription de la présentation:

C

Pointeur de type void Définition : Un pointeur de type générique peut pointer vers n'importe quel type d'objet Déclaration void *p Déclare un pointeur générique p dont on n'a pas encore spécifié le type. Usage : ce type de pointeur se rencontre dans la déclaration des arguments d'une fonction Idée : en déclarant le pointeur vers un argument de type void, on peut utiliser plusieurs types d'arguments Utilisation de la coercition : Il est nécessaire de caster le pointeur avant de l'utiliser pour référencer une variable ou de le faire intervenir dans une opération arithmétique d'addition ou de soustraction. Il n'est pas la peine de la caster pour lui assigner une valeur (adresse), pas plus pour le comparer avec NULL.

Caster void *x x est un pointeur sur void Cas d'un entier x est un pointeur qui pointe sur un entier (int *) x Pour accéder à la variable utilisation de l'opérateur d'indirection * *(int *) x Remarque : pour un flottant remplacer int par float

Exemple Ecrire une fonction double calculant le double de la valeur qui lui est passé en argument, avec le résultat qui soit du même type. Outre la valeur elle-même on lui passe le type de la variable. Déclaration : void double(void *x, char type) CODE COMPLET /

Fonctions comme paramètres Une fonction possède une adresse en mémoire. L'adresse désigne son emplacement mémoire où ses instructions sont rangées. On peut donc manipuler l'adresse de fonction comme une adresse de variable l'adresse d'une fonction peut donc être passée comme paramètre à une fonction. Une fonction peut être appelée par l'intermédiaire d'un pointeur vers la fonction

Pointeur de fonction Définition : L'adresse d'une fonction est symbolisée par son nom (comme les tableaux). un nom de fonction comme printf est un pointeur constant vers la fonction. Syntaxe Pour ranger l'adresse d'une fonction dans un pointeur <type> (*<pointeur>) (para) Exemple void * (*fp)(); fp est un pointeur pointant vers une fonction qui retourne un pointeur vers un type void. Si function1 est une fonction alors fp=function1 affecte au pointeur fp, via leur nom, l'adresse de la fonction function1

Appels de fonctions Une fonction peut être lancée en communiquant son adresse au compilateur donnant l'adresse de la fonction indiquant un pointeur de fonction déréférencé. L'appel de la fonction nécessite la mise en parenthèses de l'expression *<pointeur> exemple int (*fp)()=printf; /*déf d'un pointeur de fonction initialisé à l'adresse de printf*/ (*fp)("Ce texte est affiché"); /*les () de (*fp) sont très importantes*/ Evocation de fonctions mathématique non pas par leur nom mais par leur adresse : Les adresses de fonctions sont rangées dans un tableau de pointeurs de fonctions void (*t[5])() = {moyenne, somme, ecart-type, carre, racine}; on définit ici un tableau t ayant 5 éléments qui sont des pointeurs vers des fonctions de type void. (*t[4]) exécute la fonction racine.

Rappel de Syntaxe int x x variable de type entier int *x x pointeur vers un entier int *x() x fonction qui retourne un pointeur vers un entier int (*x)() x pointeur vers une fonction qui renvoie un entier (*x) exécute alors la fonction x rem : les () sont indispensable la priorité des () est plus forte que l'opérateur * int (*x)[10] int (*x())[10] int*(x[10])() int(*x[10])() int (*x)[10] x est un pointeur vers des tableaux de 10 éléments de type int int (*x())[10] x est fonction retournant une valeur de type pointeur vers des tableaux de 10 elements de type int int*(x[10])() x est un tableau de fonctions retournant des pointeur vers un entier int(*x[10])() x est un tableau de dix pointeurs vers des fonctions retournant des valeurs de type int rem : les éléments d'un tableau ne sont pas des fonctions. (mais peuvent être des pointeurs vers des fonctions) la valeur de retour d'une fonction ne doit pas être une fonction ou un tableau mais un pointeur vers un tableau ou une fonction.

Pointeur vers des structures Utilisation Pour passer une structure comme argument à une fonction. Définition de la structure Déclaration d'un pointeur vers la structure Pour initialisation : Réservation de la mémoire Accès aux membres de la structure En utilisant le nom de la structure Avec un pointeur vers la structure et l'op d'indirection * Avec un pointeur vers la structure et l'op d'indirection ->

Pointeur vers des structures Utilisation Pour passer une structure comme argument à une fonction. struct part { int nb; char nom[10]; }; struct part *p_part; struct part mapart; p_part=&mapart; Accès aux membres de la structure mapart.nb = (*p_part).nb= p_part->nb= Utilisation Pour passer une structure comme argument à une fonction. Définition de la structure Déclaration d'un pointeur vers la structure Pour initialisation : Réservation de la mémoire Accès aux membres de la structure En utilisant le nom de la structure Avec un pointeur vers la structure et l'op d'indirection * Avec un pointeur vers la structure et l'op d'indirection ->

Préprocesseur #ifndef _VALEUR_H_ /* Ce qui suit est ignoré jusqu'à l'instruction #endif si le symbole _valeur_H- est déjà défini */ #define _VALEUR_H_ /* Définition préprocesseur empêchant le fichier d'être inséré plusieurs fois dans la compilation du même fichier .c : le symbole _valeur_H_ est défini lors de la première inclusion de ce fichierlors de la phase de préprocessing*/ extern float valeur_courante; /* Référence externe à une variable globale, la variable globale n'est pas déclarée, mais on dit explicitement au compilateur qu'elle est déclarée quelque part dans le programme. En l'occurrence, elle est déclarée dans le corps du module */ #endif La présence des _ rende peu probable la présence de même nom.

Préprocesseur /* Fichier valeur.c Corps de module contenant l'implémentation des fonctions de gestion de la valeur courante */ #include "valeur.h" /* implementation des fonctions déclarées dansl'en-tête de module */ float valeur_courante; /* déclaration effective de la variable globale */ float valeur_test(){} /* Fichier main.c contenant le programme principal */ void main() { /* programme principal utilisant le module valeur */ }

Paramètre de fonction Char *strcpy(char *destination, const char *source) Il est difficile de distinguer si un paramètre comme un tableau ou un pointeur est un paramètre d'entrée, ou bien d'entrée/sortie. Mot clé const (constant)

Variable static Par défaut les variables locales sont automatiques. Elles sont crées et détruites avec l'appel et la fin de la fonction. La valeur de la variables n'est pas conservée entre deux appels Si la valeur de la variable doit être connue à l'appel de la fonction, la variable doit être définie comme statique. La variable statique est initialisée au premier appel de la fonction. static int i; Une fonction d'impression doit connaître le nb de lignes deja envoyéés vars l'imprimante pour effectuer le changement de page

Traitement des erreurs Une partie des fonctions susceptibles de renvoyer une erreur revoient un entier représentant le statut d'erreur. Généralement, une valeur de retour nulle est renvoyée s'il n'y a pas eu d'erreut. Dans le cas où le code lui-même ne n'est pas renvoyé par la fonction, celle-ci modifie une variable globale qui contient le code de l'erreur nommée errno On notera que le traitement des erreur rend le code diificile à lire.