ANSI C 和函数重载

发布于 2024-12-11 03:14:21 字数 734 浏览 0 评论 0原文

可能的重复:
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 函数名称来说,这不是一个好的命名

Possible Duplicate:
function overloading in C

ANSI C doesn't permit function overloading (I don't sure about C99).

for example:

char  max(char  x, char  y);
short max(short x, short y);
int   max(int   x, int   y);
float max(float x, float y);

is not a valid ANSI C source code.

Which technique (or idea) should be used for function overloading problem in ANSI C?

Note:

An answer is renaming the functions, but which pattern should be used for renaming, that function names remain 'good function name'?

for example:

char  max1(char  x, char  y);
short max2(short x, short y);
int   max3(int   x, int   y);
float max4(float x, float y);

is not a good naming for max function name.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

故乡的云 2024-12-18 03:14:21

例如,在函数名称中使用要计算的数据类型

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);

Using the data type to be evaluated in the function name, for example

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);
我不是你的备胎 2024-12-18 03:14:21

在此示例中,正确的解决方案是使用宏。您还可以简单地使用一个内联函数,该函数采用最大可能的整数或浮点类型,并让编译器在已知参数较小时对其进行优化。您应该考虑一些关于签名等的极端情况,但无论如何这些已经发生了。

In this example, the proper solution is using a macro. You could also simply use an inline function that takes the largest-possible integer or floating point type and let the compiler optimize it down when the argument is known to be smaller. There are some corner cases you should consider with regards to signedness etc. but those happen already anyway.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文