当我打开2人时,我得到了以下信息:
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
int creat(const char *pathname, mode_t mode);
int openat(int dirfd, const char *pathname, int flags);
int openat(int dirfd, const char *pathname, int flags, mode_t mode);
Run Code Online (Sandbox Code Playgroud)
这非常类似于函数重载。但是据说C根本不支持函数重载。那么,这里的魔力是什么?
这些函数并不是真正的多个函数,只是一个可变参数函数,接受可变参数,这允许“重载”,即您可以使用或不使用它们的最终参数来调用它们。例如,openat在我的系统上的实际声明(省略属性标签等)是:
extern int openat (int __fd, const char *__file, int __oflag, ...);
Run Code Online (Sandbox Code Playgroud)
Final意味着它可以通过的变量参数 API ( // )...接受其他参数。stdarg.hva_startva_argva_end