ANSI C和函数重载[重复]
Posted
技术标签:
【中文标题】ANSI C和函数重载[重复]【英文标题】:ANSI C and function overloading [duplicate] 【发布时间】:2011-12-11 15:06:53 【问题描述】:可能重复:function overloading in C
ANSI C 不允许函数重载(我不确定 C99)。
例如:
char max(char x, char y);
short max(short x, short y);
int max(int x, int y);
float max(float x, float y);
不是有效的 ANSI C 源代码。
ANSI C 中的函数重载问题应该使用哪种技术(或想法)?
注意:
答案是重命名函数,但是应该使用哪种模式进行重命名,函数名称保持'好函数名称'?
例如:
char max1(char x, char y);
short max2(short x, short y);
int max3(int x, int y);
float max4(float x, float y);
对于max
函数名称,这不是一个好的命名。
【问题讨论】:
也许定义一个max
宏? ;-)
@DidierTrosset: max 只是一个例子,想象一个非常复杂的函数。
如果函数重载对你很重要,那么也许你应该考虑使用 C++ 而不是 C ?
正如 nc3b 提到的,有一个帖子。我会根据它的答案提出这个解决方案:***.com/questions/479207/function-overloading-in-c/…,因为它是可移植的。
【参考方案1】:
在函数名中使用要求值的数据类型,例如
char max_char(char x, char y);
short max_short(short x, short y);
int max_int(int x, int y);
float max_float(float x, float y);
【讨论】:
这是标准库所做的——例如我们有atoi()
、atol()
、atof()
和atod()
。【参考方案2】:
在此示例中,正确的解决方案是使用宏。您也可以简单地使用一个内联函数,该函数采用可能最大的整数或浮点类型,并在已知参数较小时让编译器对其进行优化。关于签名等,您应该考虑一些极端情况,但无论如何这些都已经发生了。
【讨论】:
以上是关于ANSI C和函数重载[重复]的主要内容,如果未能解决你的问题,请参考以下文章