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和函数重载[重复]的主要内容,如果未能解决你的问题,请参考以下文章

c ++线程'找不到匹配的重载函数'[重复]

每个构造函数,方法和运算符重载的c ++多重定义错误[重复]

c++tostring有多个重载

c语言怎么写重载函数?

在 C++ 中重写基的重载函数 [重复]

在 C++ 中重写基的重载函数 [重复]