C 中两个函数共享相同的签名

alg*_*lgo 3 c overloading file function

我读到 C 不支持函数重载。但在这张幻灯片中,我们可以看到它是不正确的,我的教授说:“在 C 中,同一个函数名怎么可能有 2 个不同的签名?”

在此输入图像描述

有人可以解释一下吗?

Lun*_*din 6

这是不可能的。代码如下:

int open(const char* path, int flags);
int open(const char* path, int flags, mode_t mode);
Run Code Online (Sandbox Code Playgroud)

是无效的 C 并且不会编译(但有效的 C++)。

然而,C 支持可变参数函数,旧open函数是使用它来实现的。它实际上声明为:

int open(const char *path, int oflag, ... );
Run Code Online (Sandbox Code Playgroud)

其中...允许通过 的功能使用可变数量的参数stdarg.h

  • 值得注意的是,可变参数函数非常不安全,因为它们不存在类型安全性和不确定性行为。此类函数应被视为已过时,并且在生产质量代码中应避免使用。我们只需要查看“stdio.h”即可了解原因 - 这个库可能是用任何编程语言编写的最有害的库,以对人类造成的所有损害的成本作为衡量标准。因此,请不要在新项目中实现自己的可变参数函数 - _非常糟糕的想法_。 (2认同)