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
With typedef you can write as Code: typedef void (*PFNSMSSTATUS)(void * pUser, int status) ; PFNSMSSTATUS fptr = func; fptr(NULL,1); return 0; But without typedef it should be Code: void (*PFNSMSSTATUS)(void * pUser, int status) ; PFNSMSSTATUS = func; PFNSMSSTATUS(NULL,1); return 0;
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
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.
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
This is bad code: Code: void void Execute () This is bad code: Code: { ......... ......... Get a different book.
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
Hi, How r u ? See this my code, here u need change calling based on swich case to make an array that all. enjoy. 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); }
Hi sanjai, Thats a vry good example cld u refer me some links to understand mor about callback functions... That wld b vry helpful.. Thanks in Advance.