This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

function pointer

hi all,

do you think i can work around function pointers as following:

extern void a(void);
extern void b(void);

void fptr(void *fp)
{
if (fp == a)
a();
if (fp == b)
b();
}

void main(void)
{
void *fp;
fp = (void *)a; //or b
fptr(fp);
}

Parents
  • "Would this solve function pointer problem?"

    Possibly, but in a very wasteful way, and no more maintainable than using the Linker directives.

    You are effectively just using the function pointer as an index - so why not just use a plain byte index instead?

    void func_caller ( unsigned char index )
    {
       unsigned char i;
       for (i = 0; i < 10; i++)
       {
          switch( index )
          {
             case 1: func1(i);
                     break;
             case 2: func2(i);
                     break;
             case 3: func3(i);
                     break;
             // etc
          }
       }
    }
    You could, of course, define an enum to make things clearer.

    BTW: note the use of the < pre > and < /pre > tags to retain the formatting - see the instructions when you make a post.

Reply
  • "Would this solve function pointer problem?"

    Possibly, but in a very wasteful way, and no more maintainable than using the Linker directives.

    You are effectively just using the function pointer as an index - so why not just use a plain byte index instead?

    void func_caller ( unsigned char index )
    {
       unsigned char i;
       for (i = 0; i < 10; i++)
       {
          switch( index )
          {
             case 1: func1(i);
                     break;
             case 2: func2(i);
                     break;
             case 3: func3(i);
                     break;
             // etc
          }
       }
    }
    You could, of course, define an enum to make things clearer.

    BTW: note the use of the < pre > and < /pre > tags to retain the formatting - see the instructions when you make a post.

Children
  • Function pointers is a wonderful means of achieveing certain things on processors with a suitable architecture.

    Here in the '51 community we often see someone trying to force the '51 to "behave".

    Darn it, the '51 is NOT a PC. Accept the challenges/limitations or stick with your PC.

    Function pointers is a nightmare in the '51 architecture, not in Keil C.

    Erik