web-dev-qa-db-fra.com

Comment créer un typedef pour les pointeurs de fonction

Je pense qu'il serait plus facile d'utiliser des pointeurs de fonction si je créais un typedef pour un pointeur de fonction, mais il me semble que je me fais trébucher sur une syntaxe ou une utilisation ou quelque chose sur typedef pour les pointeurs de fonction, et je pourrais utiliser de l'aide.

J'ai

int foo(int i){ return i + 1;}
typedef <???> g;
int hvar;
hvar = g(3)

C'est essentiellement ce que j'essaie d'accomplir.Je suis un programmeur C plutôt nouveau et cela me lance trop. Ce qui remplace <???>?

32
SetSlapShot

Votre question n'est pas claire, mais je pense que vous voudrez peut-être quelque chose comme ceci:

int foo(int i){ return i + 1;}

typedef int (*g)(int);  // Declare typedef

g func = &foo;          // Define function-pointer variable, and initialise

int hvar = func(3);     // Call function through pointer
78

Vous avez raison. Le pointeur de fonction peut être utilisé de manière pratique pour pointer vers les différentes fonctions du même type de retour et en prenant le même nombre d'arguments. Les types d'arguments doivent correspondre à la déclaration des arguments du pointeur de fonction.

Dans votre cas, vous pouvez définir votre pointeur de fonction g comme:

typedef int (*g)(int); // typedef du pointeur de fonction.

g est un pointeur de fonction pour la fonction renvoyant la valeur int et prenant un argument int.

L'utilisation du pointeur de fonction peut être illustrée par un simple programme ci-dessous:

#include<stdio.h>

typedef int (*pointer_to_function)(int first_parameter_of_type_int, int second_parameter_of_type_int);

int my_function_returning_int_and_taking_two_int_arguments(int par1, int par2)
{
    int result = par1 + par2;
    return result;
}

int my_mul_function(int par1, int par2)
{
    int result = par1 * par2;
    return result;
}

int main()
{
    int res; // returning result will be here
    pointer_to_function my_fun_pointer; // declare function pointer variable;

    my_fun_pointer = my_function_returning_int_and_taking_two_int_arguments; // function pointer points to `my_function_returning_int_and_taking_two_int_arguments` function
    res = my_fun_pointer(2,3);       // Call function through pointer
    printf(" result of `my_function_returning_int_and_taking_two_int_arguments` = %d \n", res);


    my_fun_pointer = my_mul_function; // now function pointer points to another function: `my_mul_function` 
    res = my_fun_pointer(2,3);       // Call function through pointer
    printf(" result of `my_mul_function` = %d \n", res);

   return 0;
}

SORTIE:

result of `my_function_returning_int_and_taking_two_int_arguments` = 5 
result of `my_mul_function` = 6 
3
sg7