Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    59

    [C] Puntatori a funzione

    Ciao a tutti!!!

    Volevo un chiarimento, è possibile, in C, dichiarare un vettore di puntatori a funzioni che però hanno prototipi diversi?

    Mi spiego meglio ad esempio se ho queste funzioni:
    codice:
    void f1(int);
    void f2(int);
    void f3(int);
    posso creare un vettore del tipo:
    codice:
    void (*f[3])(int);
    se invece avessi funzioni del tipo:
    codice:
    int f1(int, int);
    void f2(int, int *);
    float *f3(float);
    come potrei fare? o è proprio impossibile da realizzare?

    Grazie a tutti anticipatamente.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    è possibile, in C, dichiarare un vettore di puntatori a funzioni che però hanno prototipi diversi?
    Non in maniera semplice.
    Detto in breve, devi forzare un cast a un prototipo comune di funzione e quando ti serve quella funzione particolare, rifare il cast al tipo corretto.
    Va da se che la cosa diventa rapidamente ingestibile, specie se si hanno molte funzioni con prototipi diversi.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    59
    Grazie per la risposta, allora mi sa che mi conviene impostarlo diversamente...
    approfondirò comunque la questione, anzi se ti va e hai tempo potresti postarmi un piccolo esempio?

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Qualcosa del genere. Non l'ho provato ma l'idea dovrebbe essere chiara.
    codice:
    typedef int (FZ_INT_INT_INT)(int,int);
    typedef void (FZ_VOID_INT_PINT)(int,int*);
    typedef float (FZ_FLOAT_FLOAT)(float);
    
    typedef int(COMMON_FZ_TYPE)(int);
    
    COMMON_FZ_TYPE arr_fz[3];
    
    arr_f[0] = (COMMON_FZ_TYPE) f1;
    arr_f[1] = (COMMON_FZ_TYPE) f2;
    arr_f[2] = (COMMON_FZ_TYPE) f3;
    
    
    FZ_INT_INT_INT pf0 = (FZ_INT_INT_INT) arr_f[0];
    int a = pf(10,20);
    
    FZ_VOID_INT_PINT pf1 = (FZ_VOID_INT_PINT) arr_f[1];
    
    pf1(50,&a);
    
    FZ_FLOAT_FLOAT pf2 = (FZ_FLOAT_FLOAT) arr_f[2];
    
    float k = pf1(10.2);
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    59

    Grazie mille, sei stato gentilissimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.