title: Passing function pointers & int references to another function
body: <p>Just started working on a c project.  Need help with passing function pointers/macro functions/etc.  I'm a php &amp; python OO guy, but new to c.  I tried to generalize the example for this post. I have a main.c with a lib for the Axon microcontroller I'm working with.  Works like a charm with everything in main.c.  I need to move some of the functionality out of main to more organized lib files as my code grows.  The base microcontroller lib creates a macro function that allows me to send data to the microcontroller to make a servo move left or right.  I now need to create a servo specific file (HS-422.c) that will will allow me to pass references/pointers(?) to a generic function that will execute for each servo to ease on code duplication.</p>
  
  <p>Keep in mind I'm only focused on passing macros/functions/variable references to other functions and have them called / set.  The other basics of c I understand. I must have tried a 100 different ways to make this work today with no luck. So just wrote a simplified version hoping you might get an idea of what I'm attempting.  </p>
  
  <p>Thank you for your help!</p>
  
  <pre><code>/*
   * main.h 
   * I'm trying to make a pointer or reference to the macro.  
   * The original file had:
   * #define servo1(position) servo(PORTE,2,position); 
   */
  
   // servo is a macro defined in another microcontroller file
   #define (void)(*servo1)(position) servo(PORTE,2,position); 
   #define (void)(*servo2)(position) servo(PORTE,3,position); 
  
  
  /* main.c */
  
  // init main functions
  void servo_scan(void);
  
  // init vars
  int servo1_location = 0;
  int servo2_location = 0;
  
  int main(void)
  {
    for(;;)
    {
       servo_turn();
    }
  }
  
  // get the servos to turn
  void servo_turn(void)
  {
    turn_servo( *servo1, &amp;servo1_location, 200);
    turn_servo( *servo2, &amp;servo2_location, 950);
  }
  
  
  /* HS-422.c */
  void turn_servo(void (*servo)(int position), int &amp;currentLocation, int newLocation)
  {
    // turning
    for(uint16_t  i=&amp;currentLocation; i&lt;newLocation; i=i+10)
    {
      // turn servo
      // hoping the specifc passed servo# pointer gets called
      *servo(i);     
  
      // set value by reference to origional servo#_location var. making sure.
      &amp;currentLocation = i; 
  
      // pause
      delay_ms(20);
    }
  }
  </code></pre>