我在linux手册页中找到了重载函数

Mr *_*ang 5 c overloading

当我打开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根本不支持函数重载。那么,这里的魔力是什么?

Sha*_*ger 2

这些函数并不是真正的多个函数,只是一个可变参数函数,接受可变参数,这允许“重载”,即您可以使用或不使用它们的最终参数来调用它们。例如,openat在我的系统上的实际声明(省略属性标签等)是:

extern int openat (int __fd, const char *__file, int __oflag, ...);
Run Code Online (Sandbox Code Playgroud)

Final意味着它可以通过的变量参数 API ( // )...接受其他参数。stdarg.hva_startva_argva_end