Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   function pointer (http://www.go4expert.com/forums/function-pointer-t659/)

priyapai 24Mar2006 15:39

function pointer
 
Hi

could any1 plz tell me what does the following statement mean:

typedef void (*PFNSMSSTATUS)(void * pUser, int status);

i understand that PFNSMSSTATUS is pointing to a function taking 2 arguments n returning a void.

What is the significance of having the "typedef"


-Priya :confused:

coderzone 24Mar2006 19:12

Re: function pointer
 
typedef allows you to define the function pointer as PFNSMSSTATUS varName.

shabbir 24Mar2006 19:25

Re: function pointer
 
With typedef you can write as

Code: CPP

typedef void (*PFNSMSSTATUS)(void * pUser, int status) ;
PFNSMSSTATUS fptr = func;
fptr(NULL,1);
return 0;

But without typedef it should be
Code: CPP

void (*PFNSMSSTATUS)(void * pUser, int status) ;
PFNSMSSTATUS = func;
PFNSMSSTATUS(NULL,1);
return 0;


sowmi 24Jun2007 16:05

Re: function pointer
 
Even I have a doubt wrt to function pointers,
whether is it possible to have the function pointers for the functions where the return type and arguements are different???

Eg :
int aaa(int a,int b);
void bbb(void);
int ccc(char *aa,char *bb,char *cc)

Thanks,
Sowmi

DaWei 24Jun2007 16:14

Re: function pointer
 
You must define a function pointer to match each signature.

sowmi 24Jun2007 16:18

Re: function pointer
 
Thanks for instant reply.
So, are you trying to say that it depends on prototype.??..

DaWei 24Jun2007 17:59

Re: function pointer
 
I'm saying that when you define a function pointer, that pointer is the address of the function. When the call is made, arguments must be passed and a return value (if any) returned.

Typically, this is done on a stack frame. The address of the function is merely a destination. Key information must be available to the function when that address is reached. The format of that information must obviously be specified, as well as the quantity of information.

Write a function call in assembly language and you will have a clearer idea of the requirements.

sowmi 27Jun2007 20:31

Re: function pointer
 
Hi All,

I am trying to implement the concept of function pointer in C++.
While compiling i got some errors which I couldnt figure out the reason .
So,Please let me know what changes should be done for resolving that error.

I am trying to execute one particular command function when the commandis pressed.Likewise, I have 100 commands and whenever the commands are pressed the corresponding function + arguements should be passed and the function pointer should execute the command.


Below are my code,

command.h
**********
Code:

#define FUNCPTR  void *
#define MAX_NUM_COMMANDS 3

typedef struct
{
  char command[LINELEN];                          /* name of the command */
  char parm1[LINELEN];                            /*parameter 1 */
  char parm2[LINELEN];                            /*parameter 2 */
                                     
} ExeCmd_s;
class FunctionEntry
{

public:
    char* commandString;
    FUNCPTR pFun; 
    int SearchCommand(char* command);
};
FunctionEntry funArr[MAX_NUM_COMMANDS]=
{
            {"aaa",(FUNCPTR)aaa},
                  {"bbb", (FUNCPTR)bbb},
              {"ccc",(FUNCPTR)ccc}

};
enum commandName
{
        aaa = 0,
        bbb
};

command.c
**********
Code:

void void Execute ()
{
  .........
  .........
 Execmd execmd;
 FunctionEntry command;
 int rc;
 if(0 != SearchCommand(exeCmd.command))
 {
    command = FunctionEntry.SearchCommand(exeCmd.command);
    switch((int)command.numOfArguements)
    {
        case Zero :
          rc = ((command.pFun)();
          break;
        case one:
          rc = ((command.pFun),exeCmd.parm1);
          break;
    }
 }
 else
 {
  printf("No match");
 }

}



//Function to search and returns the index of the command

int FunctionEntry :: SearchCommand(char* command)
{
   
    ExeCmd_s exeCmd;  //already had a Structure where I am extracting the commandname..
    int index = 0;   
    while(index < MAX_NUM_COMMANDS)
    {
        if(strcmp(exeCmd.command,funArr[index]) == 0)
        {
            return &funArr[index];
        }
        index++;       
    }
    return NULL;
}



Please let me know where i should change the code.
Expecting some solutions for this code ...

Thanks,
Sowmi

DaWei 27Jun2007 23:04

Re: function pointer
 
This is bad code:
Code:

void void Execute ()
This is bad code:
Code:

{
  .........
  .........

Get a different book.

sanjaik 14Aug2007 14:58

Re: function pointer
 
Hi Priya,
How r u ?
see this example of function pointer.
to get easy understand alos clear about
all fundamention of function pointer.
Code:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct strfunptr
{
        float        a;
        float  b;
        float (*Func)(float,float);

}sfptr;

float Plus(float a, float b)
{
        return a + b;
}
float Minus(float a, float b)
{
        return a - b;
}
float Mult(float a, float b)
{
        return a * b;
}

float Div(float a, float b)
{
        return a / b;
}

void Switch_With_Function_Pointer(struct strfunptr *);

int main()
{
        sfptr *ptr;

        ptr = (struct strfunptr*)malloc(sizeof(ptr));
        char ch;

        do
        {
                printf("1.Add \n");
                printf("2.Sub \n");
                printf("3.Mul \n");
                printf("4.Div \n");
       
                printf("Enter the operation Choice\n");
                scanf("%d",&ch);

                switch(ch)
                {
                        case 1 : printf(" \n Enter the numbers :");
                                        scanf("%f %f",&ptr->a,&ptr->b);
                                        ptr->Func = Plus;
                                        break;

                        case 2 : printf(" \n Enter the numbers :");
                                        scanf("%f %f",&ptr->a,&ptr->b);
                                    ptr->Func = Minus;
                                        break;

                        case 3 : printf("\n Enter the numbers :");
                                        scanf("%f %f",&ptr->a,&ptr->b);
                                        ptr->Func = Mult;
                                        break;
                        case 4 : printf(" \n Enter the numbers :");
                                        scanf("%f %f",&ptr->a,&ptr->b);
                                            ptr->Func = Div;
                                    break;

                        default :
                                printf(" \n Invalid Choice :");
                                exit(0);
                }
                Switch_With_Function_Pointer(ptr);

        }while(1);

        return 0;
}
void Switch_With_Function_Pointer(struct strfunptr *funptr )
{
        float result = funptr->Func(funptr->a,funptr->b);
        printf("Switch with function result is :%f\n",result);
}

Regards
Sanjai Kumar
sanjai.kumar@kotak.com
sanjaysonwani@rediffmail.com


Quote:

Originally Posted by priyapai
Hi

could any1 plz tell me what does the following statement mean:

typedef void (*PFNSMSSTATUS)(void * pUser, int status);

i understand that PFNSMSSTATUS is pointing to a function taking 2 arguments n returning a void.

What is the significance of having the "typedef"


-Priya :confused:



All times are GMT +5.5. The time now is 07:28.