怎样用C语言实现 函数重载
怎样用C语言实现 函数重载,用宏应该可以实现,但是有没有大牛给个例子, 其它方法实现也可以。 谢谢。。。
------解决思路----------------------
引用:引用:
C语言不支持函数重载,它在编译函数名称的时候根本就没有参数,是不是同一个函数仅仅由函数名称进行区分。
就是因为C语言没有重载机制,所以我才想用C语言的宏来实现类似C++的重载功能。你现在想做的事情,是别人上个世纪已经做过的事情。
如果非要用C语言实现,建议用长函数名,把函数名、参数类型等都放进函数名里。
例如:
func_int_int(int x,int y);
func_double_double(double x,double y);
然后人工维护。
------解决思路----------------------
仅供参考#include
double A[300][100];
double valuex[300];
double valuey[300];
int i;
double fun00(double x,double y) {return x + y ;};
double fun01(double x,double y) {return x*x+ 3*y ;};
double fun02(double x,double y) {return x + 2*y*x;};
//... fun03(double x,double y) {return ...+... ;};
//...
//... fun98(double x,double y) {return ...+... ;};
double fun99(double x,double y) {return x/2+20*y ;};
double (*funNN[100])(double,double)={
fun00,
fun01,
fun02,
// fun03,
// ...
// fun98,
fun99,
};
int main() {
double x,y;
int f,FN;
for (i=0;i<300;i++) {
valuex[i]=(double)i;
valuey[i]=(double)i;
}
FN=3;
for (i=0;i<300;i++) {
x=valuex[i];
y=valuey[i];
for (f=0;f
}
for (i=0;i<3;i++) {
for (f=0;f
printf("\n");
}
return 0;
}
//0 0 0
//2 4 3
//4 10 10
------解决思路----------------------
引用:谢谢,已经实现了
好吧,以下是个人看法
第一,你的实现中宏是多余的,所有使用宏的地方都可以直接使用函数,宏就是一个多余的中转
第二,你使用typeof关键字来实现我说的“多用一个变量来表示类型”,虽然很方便,但typeof关键字是C语言的一个扩展,不是标准的,gcc和intel编译器支持它,但微软就对此摇头了。也就是说,可移植性值得斟酌。
------解决思路----------------------
贴一个
#define FUNC(type, data) {type d1 = data; func(#type, &d1);}
void func1(int i) {printf("this is function of int type, value = %d\n\n", i);}
void func2(float f) {printf("this is function of float type, value = %f\n\n", f);}
void func(char* sz, void* p)
{
if (strcmp(sz, "int") == 0)
{
func1(*(int*)p);
}
if (strcmp(sz, "float") == 0)
{
func2(*(float*)p);
}
}
int main()
{
FUNC(int, 8);
FUNC(float, 8);
return 0;
}