今天,查看 open()
的手册页,我注意到这个函数“过载”了:
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
我认为在 C 上不可能。实现这一点的“技巧”是什么?
后期编辑:
所以它并不是真正的重载,因为在使用可变参数时 - 你只能提供相同类型的多个参数。那么,幕后的 mode_t
是一个 int 吗?
最佳答案
它正在使用 variable arguments .这些声明仅出现在手册页中,因为这 2 个是您应该调用 open() 的唯一方法。实际的 C 函数将声明为例如
int open(const char *pathname,int flags,...);
对于可变参数,参数不需要是同一类型。 printf
就是一个明显的例子。
在 open() 的情况下,如果 'flags
包含 O_CREAT 标志,则第一个变量参数必须是 mode_t,因为 open() 的实现期望它是 mode_t(在幕后是可能是 unsigned int 或 unsigned long - 但这与可变参数无关)
关于c - C中的函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21509735/