関数ポインタ例


  1. #include <stdio.h>
  2.  
  3. #define FUNC_EXE_DOINCREMENT ((int)0x01 << 0)
  4. #define FUNC_EXE_DODECREMENT ((int)0x01 << 1)
  5. #define FUNC_EXE_DODOUBLE ((int)0x01 << 2)
  6. #define FUNC_EXE_DOTRIPLE ((int)0x01 << 3)
  7. #define FUNC_NUM_MAX ((int) 4)
  8.  
  9. void behavior(int intFuncFlag, int intInputVal, int *intOutputVal);
  10. int doIncrement(int arg01);
  11. int doDecrement(int arg01);
  12. int doDouble(int arg01);
  13. int doTriple(int arg01);
  14. void debugPrint(int arg01);
  15.  
  16. int (*fp[FUNC_NUM_MAX])(int) = {
  17. doIncrement,
  18. doDecrement,
  19. doDouble,
  20. doTriple
  21. };
  22.  
  23. int main(void)
  24. {
  25. int intInputVal = 10;
  26. int intOutputVal = 0;
  27.  
  28. behavior(
  29. ( FUNC_EXE_DOINCREMENT | FUNC_EXE_DODECREMENT | FUNC_EXE_DODOUBLE | FUNC_EXE_DOTRIPLE),
  30. intInputVal,
  31. &intOutputVal
  32. );
  33.  
  34. printf("OutputVal is %d !", intOutputVal);
  35.  
  36. return (0);
  37. }
  38.  
  39. void behavior(
  40. int intFuncFlag,
  41. int intInputVal,
  42. int *intOutputVal
  43. )
  44. {
  45. int intLoopCnt = 0;
  46. int intBitMsk = 0x01;
  47.  
  48. debugPrint(intFuncFlag);
  49.  
  50. for (intLoopCnt = 0; intLoopCnt < FUNC_NUM_MAX; intLoopCnt++) {
  51. if ((intFuncFlag & intBitMsk) == 1) {
  52. *intOutputVal += fp[intLoopCnt](intInputVal);
  53. }
  54. intFuncFlag = intFuncFlag >> 1;
  55. }
  56.  
  57. return;
  58. }
  59. int doIncrement(int arg01) { return (arg01 + 1); }
  60. int doDecrement(int arg01) { return (arg01 - 1); }
  61. int doDouble(int arg01) { return (arg01 * 2); }
  62. int doTriple(int arg01) { return (arg01 * 3); }
  63.  
  64. void debugPrint(int arg01)
  65. {
  66. printf("debug print \"%d\"\n", arg01);
  67. return;
  68. }
  69.  

最終更新:2015年05月09日 17:57