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

Two functions share same signature in C

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

谁能解释一下?

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

int open(const char* path, int flags);
int open(const char* path, int flags, mode_t mode);

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

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

int open(const char *path, int oflag, ... );

其中 ... 通过 stdarg.h 的特性允许可变数量的参数。