首页
社区
课程
招聘
[分享]函数指针设计
发表于: 2021-4-19 21:40 2964

[分享]函数指针设计

2021-4-19 21:40
2964
  • \P可以查看宏替换后的样式
    然后看生成的文件。

函数指针:

 

typedef void (*PFN_SHOW)(); //定义一个函数指针
static PFN_SHOW pfnAry[100] = {0};//保存函数指针的数组
static int g_nPfnAryIndex = 0;//函数指针的下标
int InitFun(PFN_SHOW pfun){pfnAry[++g_nPfnAryIndex] = pfun; return g_nPfnAryIndex;} //把增加的函数添加到函数指针数组里

 

#define NEWFUN(name) void show_##name (){printf(#name);printf("\r\n");} //输出函数 替换成 NEWFUN(name)

 

#define ADDFUN(name) NEWFUN(name) int g##name = InitFun(&show_##name); // Add函数
ADD_FUN(hello)
ADD_FUN(word)
ADD_FUN(cpp)
ADD_FUN(asm)
int main(int argc, char* argv[])
{
int n = 0;
while(1)
{
scanf("%d",&n);
if(n > 0 && n < 100 && pfnAry[n])
{
pfnAryn;
}
}
system("pause");
return 0;
}

 

宏替换后变成了这样:

 

typedef void (PFN_SHOW)();
static PFN_SHOW pfnAry[100] = {0};
static int g_nPfnAryIndex = 0;
int InitFun(PFN_SHOW pfun)
{
pfnAry[++g_nPfnAryIndex] = pfun;
return g_nPfnAryIndex;
}
void show_hello ()
{
printf("hello");
printf("\r\n");
}
int g_hello = InitFun(&show_hello);
void show_word (){printf("word");printf("\r\n");} int g_word = InitFun(&show_word);
void show_cpp (){printf("cpp");printf("\r\n");} int g_cpp = InitFun(&show_cpp);
void show_asm (){printf("asm");printf("\r\n");} int g_asm = InitFun(&show_asm);
int main(int argc, char
argv[])
{
int n = 0;
while(1)
{
scanf("%d",&n);
if(n > 0 && n < 100 && pfnAry[n])
{
pfnAryn;
}
}
system("pause");
return 0;
}


[课程]Android-CTF解题方法汇总!

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 630
活跃值: (570)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
给楼主鼓励加油
2021-4-21 20:25
0
游客
登录 | 注册 方可回帖
返回
//