c语言printf重载,怎样用C语言实现 函数重载解决思路

怎样用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;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值