IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

tableau de constantes contenant des adresses de fonction


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Développement hardware et software
    Inscrit en
    Septembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développement hardware et software
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2018
    Messages : 4
    Par défaut tableau de constantes contenant des adresses de fonction
    Bonjour à tous,

    dans un programme en C (compilateur XC16 de Microchip), je cherche à déclarer un tableau de constantes contenant une liste d'adresses de fonctions.
    La déclaration devrait avoir la forme:
    const ???montableau[] = {&(fonction_1), ..., &(fonction_n)};

    Je n'arrive pas à trouver d'aide dans les bouquins ni sur le web. Pouvez-vous m'aider ?

    Merci de m'avoir lu. A bientôt.

    Claude

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2009
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2009
    Messages : 417
    Par défaut
    Salut,

    Tu aurais trouvé si tu avais cherché avec le terme "pointeur de fonction" plutôt qu'"adresse de fonction":
    https://chgi.developpez.com/pointeur/

    Le paragraphe VII contient la réponse à ta question, à savoir par quoi il faut remplacer le "???".
    Mais pas besoin des "&" dans ton tableau.

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 496
    Billets dans le blog
    1
    Par défaut
    Un petit typedef bien senti pourrait simplifier l'écriture

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <stdio.h>
     
    typedef void(*callback)(void);
     
    void f()
    {
        puts("f");
    }
     
    void g()
    {
        puts("g");   
    }
     
    callback array[] = {f, g};
     
    int main()
    {
        array[0]();
        array[1]();
    }

  4. #4
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Salut, bienvenue sur le forum.

    En complément des réponses fournies, tes fonctions doivent impérativement avoir la même signature (même types d'arguments et même type de retour), car un pointeur de fonction est défini pour une signature précise.

    Autrement dit, un pointeur void(*callback)(void); ne peut désigner qu'une fonction de genre void foo();.

  5. #5
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Plus exactement, il est possible de réaliser un appel via un pointeur de fonction si et seulement si celui-ci contient l'adresse d'une fonction portant la même signature.

    On peut très bien faire transiter l'adresse d'une fonction dans un pointeur de fonction (pas de donnée !) d'un type incompatible, à la condition expresse de ne pas réaliser d'appel.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développement hardware et software
    Inscrit en
    Septembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développement hardware et software
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2018
    Messages : 4
    Par défaut
    Bonjour à tous,

    merci pour l'intérêt que vous avez porté à ma question et pour vos réponses. Mais, je n'ai pas dû insister suffisamment sur le fait que je cherche à déclarer un tableau de constantes. Vous m'indiquez dans vos réponses comment déclarer un tableau de variables. J'écris un programme pour microcontrôleur. Les tailles de mémoires FLASH et RAM sont donc très limitées, il ne faut pas en gaspiller.
    Le fait de déclarer un tableau de variables occupe de la place en RAM, alors que je n'écris jamais dans ce tableau, je ne fais que le lire. D'où ma demande de constantes.
    Ma question est donc toujours d'actualité, "comment déclarer un tableau de constantes pointeurs de fonctions ?
    Merci de m'avoir lu. A bientôt.

    Claude

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/09/2014, 22h42
  2. Réponses: 5
    Dernier message: 15/03/2012, 00h26
  3. Réponses: 1
    Dernier message: 03/07/2011, 16h59
  4. [FPDF] Tableau à une dimension contenant des valeurs
    Par kluck3000 dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 23/05/2008, 13h34
  5. Réponses: 2
    Dernier message: 08/03/2007, 01h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo