#include <stdio.h>
#define FUNC_EXE_DOINCREMENT ((int)0x01 << 0)
#define FUNC_EXE_DODECREMENT ((int)0x01 << 1)
#define FUNC_EXE_DODOUBLE ((int)0x01 << 2)
#define FUNC_EXE_DOTRIPLE ((int)0x01 << 3)
#define FUNC_NUM_MAX ((int) 4)
void behavior(int intFuncFlag, int intInputVal, int *intOutputVal);
int doIncrement(int arg01);
int doDecrement(int arg01);
int doDouble(int arg01);
int doTriple(int arg01);
void debugPrint(int arg01);
int (*fp[FUNC_NUM_MAX])(int) = {
doIncrement,
doDecrement,
doDouble,
doTriple
};
int main(void)
{
int intInputVal = 10;
int intOutputVal = 0;
behavior(
( FUNC_EXE_DOINCREMENT | FUNC_EXE_DODECREMENT | FUNC_EXE_DODOUBLE | FUNC_EXE_DOTRIPLE),
intInputVal,
&intOutputVal
);
printf("OutputVal is %d !", intOutputVal
);
return (0);
}
void behavior(
int intFuncFlag,
int intInputVal,
int *intOutputVal
)
{
int intLoopCnt = 0;
int intBitMsk = 0x01;
debugPrint(intFuncFlag);
for (intLoopCnt = 0; intLoopCnt < FUNC_NUM_MAX; intLoopCnt++) {
if ((intFuncFlag & intBitMsk) == 1) {
*intOutputVal += fp[intLoopCnt](intInputVal);
}
intFuncFlag = intFuncFlag >> 1;
}
return;
}
int doIncrement(int arg01) { return (arg01 + 1); }
int doDecrement(int arg01) { return (arg01 - 1); }
int doDouble(int arg01) { return (arg01 * 2); }
int doTriple(int arg01) { return (arg01 * 3); }
void debugPrint(int arg01)
{
printf("debug print \"%d\"\n", arg01
); return;
}
最終更新:2015年05月09日 17:57