如何在C语言中实现功能重载?

如何在C语言中实现功能重载?

在C中是否有实现函数重载的方法?我正在查看要重载的简单函数,如

foo (int a)  foo (char b)  foo (float c , int d)

我认为没有直截了当的办法,我正在寻找解决办法,如果存在的话。


慕森卡
浏览 951回答 3
3回答

慕斯709654

很少有可能:printf样式函数(作为参数类型)OpenGL样式函数(输入函数名)c+的C子集(如果可以使用c+编译器)

幕布斯6054654

如前所述,重载是C不支持的意思。解决这个问题的一个常见成语是让函数接受标记结合..这是由struct参数,其中struct本身由某种类型的指示符组成,例如enum,以及union不同类型的值。例子:#include&nbsp;<stdio.h>typedef&nbsp;enum&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;T_INT, &nbsp;&nbsp;&nbsp;&nbsp;T_FLOAT, &nbsp;&nbsp;&nbsp;&nbsp;T_CHAR,}&nbsp;my_type;typedef&nbsp;struct&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;my_type&nbsp;type; &nbsp;&nbsp;&nbsp;&nbsp;union&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;b;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;c; &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;my_union;}&nbsp;my_struct;void&nbsp;set_overload&nbsp;(my_struct&nbsp;*whatever)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(whatever->type)&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;T_INT: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;whatever->my_union.a&nbsp;=&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;T_FLOAT: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;whatever->my_union.b&nbsp;=&nbsp;2.0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;T_CHAR: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;whatever->my_union.c&nbsp;=&nbsp;'3'; &nbsp;&nbsp;&nbsp;&nbsp;}}void&nbsp;printf_overload&nbsp;(my_struct&nbsp;*whatever)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(whatever->type)&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;T_INT: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",&nbsp;whatever->my_union.a); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;T_FLOAT: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%f\n",&nbsp;whatever->my_union.b); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;T_CHAR: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%c\n",&nbsp;whatever->my_union.c); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;}}int&nbsp;main&nbsp;(int&nbsp;argc,&nbsp;char*&nbsp;argv[]){ &nbsp;&nbsp;&nbsp;&nbsp;my_struct&nbsp;s; &nbsp;&nbsp;&nbsp;&nbsp;s.type=T_INT; &nbsp;&nbsp;&nbsp;&nbsp;set_overload(&s); &nbsp;&nbsp;&nbsp;&nbsp;printf_overload(&s); &nbsp;&nbsp;&nbsp;&nbsp;s.type=T_FLOAT; &nbsp;&nbsp;&nbsp;&nbsp;set_overload(&s); &nbsp;&nbsp;&nbsp;&nbsp;printf_overload(&s); &nbsp;&nbsp;&nbsp;&nbsp;s.type=T_CHAR; &nbsp;&nbsp;&nbsp;&nbsp;set_overload(&s); &nbsp;&nbsp;&nbsp;&nbsp;printf_overload(&s);&nbsp;}
打开App,查看更多内容
随时随地看视频慕课网APP