社区
C语言
帖子详情
一个关于函数调用的问题
realduke2000
2007-07-13 02:34:27
func.h里函数列表,我想调用里面的函数.
现在问题是里面的函数是变化的,也就是说不知道里面的函数的名,参数等一些信息,
这些信息是从外面传进来的,传进来的信息可以自定义,比如:函数参数列表,参数总数,函数的序号,你甚至可以用宏定义将FUNC.H里面的函数重新命名,但是就是不确定他们都是什么...
应该怎么解决,不知道我说没说明白.
其实就是我要写一个测试别人程序的程序,这个程序就是调用别人的函数了什么的
...全文
254
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++递归程序
递归是计算机科学中的
一个
核心概念,它是一种解决复杂
问题
的方法,通过将大
问题
分解为规模更小、更容易解决的小
问题
来实现。在程序设计中,递归允许程序调用自身来处理这些分解后的
问题
。递归程序通常包含两个主要...
获得当前应用程序执行时所在的目录
这是
一个
Windows API函数,它允许你获取指定模块(通常为当前进程的主模块,即执行程序)的完整路径。函数原型如下: ```cpp DWORD GetModuleFileNameA( HMODULE hModule, // 模块句柄 LPSTR lpFilename, // 用于...
c++ primer第五版第6章答案
5. **内存分配差异**:当形参和实参不是指针类型时,形参会在栈上分配
一个
新的内存单元来存储实参的副本;若是指针,则实际上传递的是实参的地址。 ### 知识点二:
函数调用
常见错误 #### 示例 1. **返回类型错误**...
Socket编程例子
1. 创建Socket:在客户端,使用`socket()`函数创建
一个
Socket实例,然后用`connect()`函数连接到服务器的指定端口。在服务器端,同样使用`socket()`函数创建Socket,但之后要调用`bind()`绑定监听的IP地址和端口,...
指定两个日期, 计算相隔的天数
无论是通过FRM文件的交互式界面,还是在代码中直接调用VBP文件内的函数,计算两个日期之间相隔的天数都是
一个
基本的时间管理操作。了解和掌握这些技巧有助于你在日常开发工作中更有效地处理时间序列数据,无论是为了...
C语言
70,022
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章