当前位置: 技术问答>linux和unix
问一个简单的Linux下C语言的问题
来源: 互联网 发布时间:2016-06-28
本文导语: Linux下的C语言的打开文件的函数open有两种调用形式,分别为 int open(const char *filename, int flag) int open(const char *filename,mode_t mode) 这不是函数的重载吗?如果不是重载,那么它是基于什么原理实现的呢? ...
Linux下的C语言的打开文件的函数open有两种调用形式,分别为
int open(const char *filename, int flag)
int open(const char *filename,mode_t mode)
这不是函数的重载吗?如果不是重载,那么它是基于什么原理实现的呢?
int open(const char *filename, int flag)
int open(const char *filename,mode_t mode)
这不是函数的重载吗?如果不是重载,那么它是基于什么原理实现的呢?
|
不是c++那种函数重载,是可变函数参数,类似printf
|
另外,你的第二个函数声明是不是写掉了个参数,没见过啊
|
c里面的两个函数原型是这样的:
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
在c语言中如果函数参数的个数不一样会被认为是两个不同的函数,不是重载。
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
在c语言中如果函数参数的个数不一样会被认为是两个不同的函数,不是重载。
|
C语言会允许两个函数名一个, 参数不一样的定义?!
这个是从man page 里看到的吧?
直接查看一下/usr/include/fcntl.h, 就知道实际是只定义了一个函数, 只不过这个函数支持变参.
#ifndef __USE_FILE_OFFSET64
extern int open (__const char *__file, int __oflag, ...) __nonnull ((1));
#else
# ifdef __REDIRECT
extern int __REDIRECT (open, (__const char *__file, int __oflag, ...), open64)
__nonnull ((1));
# else
# define open open64
# endif
#endif
#ifdef __USE_LARGEFILE64
extern int open64 (__const char *__file, int __oflag, ...) __nonnull ((1));
#endif