社区
C语言
帖子详情
一个关于函数调用的问题
realduke2000
2007-07-13 02:34:27
func.h里函数列表,我想调用里面的函数.
现在问题是里面的函数是变化的,也就是说不知道里面的函数的名,参数等一些信息,
这些信息是从外面传进来的,传进来的信息可以自定义,比如:函数参数列表,参数总数,函数的序号,你甚至可以用宏定义将FUNC.H里面的函数重新命名,但是就是不确定他们都是什么...
应该怎么解决,不知道我说没说明白.
其实就是我要写一个测试别人程序的程序,这个程序就是调用别人的函数了什么的
...全文
255
15
打赏
收藏
一个关于函数调用的问题
func.h里函数列表,我想调用里面的函数. 现在问题是里面的函数是变化的,也就是说不知道里面的函数的名,参数等一些信息, 这些信息是从外面传进来的,传进来的信息可以自定义,比如:函数参数列表,参数总数,函数的序号,你甚至可以用宏定义将FUNC.H里面的函数重新命名,但是就是不确定他们都是什么... 应该怎么解决,不知道我说没说明白. 其实就是我要写一个测试别人程序的程序,这个程序就是调用别人的函数了什么的
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
realduke2000
2007-07-17
打赏
举报
回复
感觉cppunit/lite跟我需要的情况不一样,我需要的是根据测试用例调用函数,而不是一开始写好的测试用例....
不过好象也可以这么做...
realduke2000
2007-07-17
打赏
举报
回复
cppunitlite是什么收获?我看了CPPUNIT,主要是依靠宏替换在里面简略了不少自己写的麻烦...
但是C能实现么?
taodm
2007-07-17
打赏
举报
回复
建议你看cppunitlite,而不是cppunit。
realduke2000
2007-07-17
打赏
举报
回复
每次增加一个类型的函数,确实需要增加一个CALL函数,但是做不到CPPUNIT那么好,我应该去看看CPPUNIT是怎么实现的...
xiantongyuan
2007-07-17
打赏
举报
回复
那不需要给每个重新写一个测试程序吗
你能考虑哪么周全吗?
realduke2000
2007-07-17
打赏
举报
回复
重新写了一个,但是参数传递问题还没有解决...
希望有高人给指点一下
-----------------------------test.c------------------------------------------------
#include "call.h"
#include "funstru.h"
#include "mat.h"
int main()//参数列表和参数个数
{
unsigned char argv[10];
// int *argv=malloc(sizeof(int)*10),argc=-1,*p;
// p=argv;
int i_1=0,j_2=0,k_3=0;
//定义一个函数的序号结构
__fun_struct__ fs;
// do//模拟读入脚本驱动用例的内容
// {
// scanf("%d",p);
// argc++;
// }while(*p++!=-1);
while(1)
{
printf("输入类型、函数序号\n");
scanf("%d,%d",&fs.type_id,&fs.id);
point_to(fs);//将函数指针指向相应函数
switch(fs.type_id)//根据函数序号来确定调用那个函数
{
case 0:
call_void(pFUNC_0);
break;
case 1:
//j_2=call_int(pFUNC_1,argv[0],argv[1]);
j_2=call_int(pFUNC_1,2,4);
break;
case 2:
//k_3=call_int_int(pFUNC_2,argv[0],argv[1],argv[2]);break;
k_3=call_int_int(pFUNC_2,2,3,4);break;
default:printf("error!\n");break;
}
printf("\ni_1=%d,j_2=%d,k_3=%d\n",i_1,j_2,k_3);
}
return 0;
}
----------------------------------------------------------------------------------
-----------------------------mat.h------------------------------------------------
#ifndef MAT_H_
#define MAT_H_
#include "stdarg.h"
#include "stdio.h"
int add(int var1,int var2)//type_id=1,id=0;
{
return var1+var2;
}
int add3(int var1,int var2,int var3)//type_id=2,id=1;
{
return var1+var2+var3;
}
void print(void)//type_id=0,id=3;
{
printf("hello,world");
}
int sub(int var1,int var2)//type_id=1,id=4;
{
return var1-var2;
}
int func(int i,...)
{
return i;
}
--------------------------------------------------------------------------------
-----------------------------reg.h------------------------------------------------
#ifndef REG_H_
#define REG_H_
#include "mat.h"
#include "funstru.h"
/*
1.按要求将指针指向相应函数
*/
//定义很多种类型的函数指针
void (*pFUNC_0)(void);
int (*pFUNC_1)(int,int);
int (*pFUNC_2)(int,int,int);
//根据类型号和函数id将函数指针指向函数
int point_to(__fun_struct__ fs/*类型*/)
{
//将函数指针指向相应的函数
switch(fs.type_id)//先判断类型
{
case 0:
switch(fs.id)
{
case 3:
pFUNC_0=print;
break;
default:
printf("point--to case 0's default");
break;
}
case 1:
switch(fs.id)//再判断函数序号
{
case 0:
pFUNC_1=add;
break;
case 4:
pFUNC_1=sub;
break;
default:
printf("point_to--fs.id's default");
break;
}
break;
default:
printf("point_to's defaut");
break;
}
return 0;
}
#endif
------------------------------------------------------------------------------------
-----------------------------call.h------------------------------------------------
#ifndef CALL_H_
#define CALL_H_
#include "reg.h"
//定义很多类型的函数的调用函数
int call_void(void (*funp)(void))
{
funp();
return 0;
}
int call_int(int (*funp)(int,int),int var1,int var2)
{
return funp(var1,var2);
}
int call_int_int(int (*funp)(int,int,int),int var1,int var2,int var3)
{
return funp(var1,var2,var3);
}
#endif
----------------------------funstru.h--------------------------------------------
#ifndef FUNSTRU_H_
#define FUNSTRU_H_
typedef struct
{
//函数序号
unsigned char id;
//函数类型
unsigned char type_id;
//输入
unsigned char input[10];
}__TestCase__;
/*
#define FUNC_0(var1,...) add(var1,__VA_ARGS__)
#define FUNC_1(var1,...) add(var1,__VA_ARGS__)
#define FUNC_2(var1,...) add3(var1,__VA_ARGS__)
*/
#endif
-----------------------------------------------------------------------------
sdy3653232
2007-07-15
打赏
举报
回复
你是说通过外部探测知道内部构造么?
mymtom
2007-07-15
打赏
举报
回复
学习关注!
prgmBaggio
2007-07-14
打赏
举报
回复
如果你连文件里有什么函数都不知道,你怎么去调用呢?
guzhilei1986
2007-07-13
打赏
举报
回复
不明白。学习了。
realduke2000
2007-07-13
打赏
举报
回复
reg.h这个文件是每次改动函数需要改动的,这不就是不知道函数名,参数,但是还得调用么...
看来我的表达能力还有待提高啊
realduke2000
2007-07-13
打赏
举报
回复
我已经弄出来了,大家看看吧,就是这个意思
------------------------------mat.h-------------------------------------------------
#include "stdarg.h"
#include "stdio.h"
int add(int var1,int var2)
{
return var1+var2;
}
int add3(int var1,int var2,int var3)
{
return var1+var2+var3;
}
------------------------------------------------------------------------------------
-------------------------------reg.h------------------------------------------------
#include "mat.h"
#define FUNC_0(var1,...) add(var1,__VA_ARGS__)
#define FUNC_1(var1,...) add(var1,__VA_ARGS__)
------------------------------------------------------------------------------------
-----------------------------test.c-------------------------------------------------#include "reg.h"
int main()
{
int *argv=malloc( sizeof(int) * 10 ),argc=-1,*p;
int i_1=0,j_2=0,k_3=0;
p=argv;
do//读入脚本驱动用例的内容
{
scanf("%d",p);
argc++;
}while(*p++!=-1);
switch(argc)//根据参数和函数序号来确定调用那个函数
{
//case 1:i_1=FUNC_0(argv[0]);break;
case 2:j_2=FUNC_1(argv[0],argv[1]);break;
case 3:k_3=FUNC_2(argv[0],argv[1],argv[2]);break;
default:printf("error!\n");break;
}
printf("i_1=%d,j_2=%d,k_3=%d",i_1,j_2,k_3);
return 0;
}
------------------------------------------------------------------------------------
felixskycao
2007-07-13
打赏
举报
回复
不知道lz的意思
beyond907
2007-07-13
打赏
举报
回复
不明白!
taodm
2007-07-13
打赏
举报
回复
没看懂。
读懂C++递归程序
递归在计算学科中是一种非常重要的方法,计算理论中到处都有用递归进行表述的
问题
及求解方法。 在程序设计中,数据描述和算法表达也常用递归,通常把
一个
大型复杂的
问题
层层转化为
一个
与原
问题
相似的规模较小的
问题
来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。 掌握递归,计算机类专业的学生必须要做到。 本文基于
一个
C++递归程序,分步骤进行演示,帮助你知道其执行过程,试图帮助你啃下这块硬骨头。
获得当前应用程序执行时所在的目录
在PB中获得当前应用程序执行时所在的目录和Exe名称。使用API函数GetModuleFileNameA。
c++ primer第五版第6章答案
c++ primer第五版第6章答案
Socket编程例子
Socket编程例子
指定两个日期, 计算相隔的天数
指定两个日期, 计算相隔的天数
C语言
70,022
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章