- 论坛徽章:
- 0
|
在看了精华里的一个贴子后有了这个问题:
http://bbs.chinaunix.net/viewthread.php?tid=422544&extra=page%3D3%26filter%3Ddigest&page=3
贴子里面FH老大用了
static (*T_NUM)( int, T_NUM, T_NUM ) FuncList[] = {
SameSign, DiffSign, DiffSign, SameSign
};
来声明一个函数指针数组
但我在编译的里时候,出错提示说‘FuncList’ undeclared
- #include <stdio.h>
- typedef int T_NUM;
- #define SHIFTBITS ( sizeof( T_NUM ) * 8 - 1 )
- static int CheckFlag( T_NUM x, T_NUM y )
- {
- int s1 = (x >> SHIFTBITS)&1;
- int s2 = (y >> SHIFTBITS)&1;
- /*
- * if x have the same sign with y ,it will return 0 ( all +), or 3 ( all -).
- * if x + y - ,it will return 1;
- * if x - y + ,it will return 2;
- * */
- return ( s1 * 2 + s2 );
- }
- static T_NUM SameSign( int Flag, T_NUM x, T_NUM y )
- {
- T_NUM z = x - y;
- T_NUM t[2] = { x, y };
- int s = (z >> SHIFTBITS)&1;
- return t[s];
- }
- static T_NUM DiffSign( int Flag, T_NUM x, T_NUM y )
- {
- T_NUM t[2] = { x, y };
- return t[Flag - 1];
- }
- /*
- * static (*T_NUM)( int, T_NUM, T_NUM ) FuncList[] = {
- SameSign, DiffSign, DiffSign, SameSign
- };
- */
- static (*T_NUM)( int, T_NUM, T_NUM ) FuncList[] = {
- SameSign, DiffSign, DiffSign, SameSign
- };
- T_NUM Max( T_NUM x, T_NUM y )
- {
- int Flag = CheckFlag( x, y );
- return (*FuncList[Flag])( Flag, x, y );
- }
- int
- main()
- {
- printf( "Please Input two integer:\n" );
- T_NUM a, b;
- scanf( "%d", &a );
- scanf( "%d", &b );
- printf( "The bigger of the two is %d\n", Max(a, b) );
- return( 0 );
- }
复制代码 |
|