函数'int mkdir(const char*)'的参数太多

Mat*_*orm 7 c mingw

我试图在windows下编译一个linux编写的程序(我使用mingw)

void make_directory(const char* name) {
  mkdir(name1, name2);
}
Run Code Online (Sandbox Code Playgroud)

有一个错误:

Too Many Arguments to function 'int mkdir(const char*)'
Run Code Online (Sandbox Code Playgroud)

有什么想法解决这个问题?

oll*_*llo 6

正如评论中所说,mkdir()只需要一个论点.但是,由于此函数已弃用,您应该使用 _mkdir():

int _mkdir(const char *dirname); 
int _wmkdir(const wchar_t *dirname); /* for wide-character */
Run Code Online (Sandbox Code Playgroud)

如果你想在两个系统上使用你的功能(linux/mingw):

void make_directory(const char* name)
{
#ifdef __linux__
    mkdir(name, 777); /* Or what parameter you need here ... */
#else
    _mkdir(name);
#endif
}
Run Code Online (Sandbox Code Playgroud)

编辑:

MinGW实施:

_mkdir():

_CRTIMP int __cdecl __MINGW_NOTHROW _mkdir (const char*);
Run Code Online (Sandbox Code Playgroud)

MKDIR():

_CRTIMP int __cdecl __MINGW_NOTHROW mkdir (const char*);
Run Code Online (Sandbox Code Playgroud)

两者都是指定的io.h,但我想更好地包括direct.h(包括io.h在其中).

  • POSIX一个,是的.但MinGW实现(参见我的帖子的编辑)只需要一个.因此,您应该区别Windows(MinGW)/ linux - 您选择的任何功能. (7认同)
  • 据我了解,MinGW只使用微软的运行时库,所以它真的是微软`mkdir()`,只需要一个参数.遗憾的是,微软和POSIX具有相同名称的不兼容功能,但两者的历史可以追溯到足够早(分别是早期的UNIX和MS-DOS),这并不太令人惊讶.所以微软正在弃用它自己的*`mkdir()`函数,鉴于名称冲突,这可能是一件好事.(我会拒绝为新名称选择`_mkdir()`.) (4认同)
  • 确切地说,MinGw是"GCC for Windows".像这样的OS函数来自C运行时库(`_CRTIMP`). (4认同)

sda*_*aau 6

我设法逃脱了这个,为mingw-w64下的Linux编写的程序构建:

#if (defined(_WIN32) || defined(__WIN32__))
#define mkdir(A, B) mkdir(A)
#endif
Run Code Online (Sandbox Code Playgroud)