c - C中的函数重载

标签 c posix overloading

今天,查看 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/

相关文章:

c - 在 C 函数中,char 和 string 有什么区别?

algorithm - POSIX ls -R 是否规定了特定的遍历顺序?如果不是,那么哪个假设更可能是可移植的 : depth-first or breadth-first?

c++ - 在模板类中使用 r 和 l 值构造函数时出错

C 不会循环遍历函数

c - 删除 C 程序中的所有注释 - 此代码是否有任何可能的改进?

c - C中的函数重载

c++ - 抽象类重载 ostream 运算符

c++ - 如何为一类数值数组同时重载所有数学函数

c - 为什么 perf 显示的浮点事件少于预期?

node.js - 为什么 errno 34 和代码 ENOENT 不匹配