function pointer

priyapai's Avatar, Join Date: Mar 2006
Go4Expert Member
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
0
coderzone's Avatar, Join Date: Jul 2004
Team Leader
typedef allows you to define the function pointer as PFNSMSSTATUS varName.
0
shabbir's Avatar, Join Date: Jul 2004
Go4Expert Founder
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;
0
sowmi's Avatar
Light Poster
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
0
DaWei's Avatar, Join Date: Dec 2006
Team Leader
You must define a function pointer to match each signature.
0
sowmi's Avatar
Light Poster
Thanks for instant reply.
So, are you trying to say that it depends on prototype.??..
0
DaWei's Avatar, Join Date: Dec 2006
Team Leader
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.
0
sowmi's Avatar
Light Poster
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

Last edited by shabbir; 27Jun2007 at 21:54.. Reason: Code block
0
DaWei's Avatar, Join Date: Dec 2006
Team Leader
This is bad code:
Code:
void void Execute ()
This is bad code:
Code:
{
  .........
  .........
Get a different book.
0
sanjaik's Avatar
Light Poster
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

Last edited by shabbir; 14Aug2007 at 16:02.. Reason: Code block