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
的特性允许可变数量的参数。
我读到 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
的特性允许可变数量的参数。