Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么wxMkDir在成功创建目录时返回0?_C++_Wxwidgets_Mkdir - Fatal编程技术网

C++ 为什么wxMkDir在成功创建目录时返回0?

C++ 为什么wxMkDir在成功创建目录时返回0?,c++,wxwidgets,mkdir,C++,Wxwidgets,Mkdir,所以,我必须承认我已经知道答案了。我这样问是为了让碰巧遇到相同问题的其他人能够找到解决由错误文档引起的问题的方法 我的环境是VS 2015 C++,WxWIDGuest3.0.2,在Windows 7上开发。 在一些遗留代码中,没有检查对wxMkDir的调用是否成功。根据,wxMkDir的返回类型为bool,如果成功,则返回true。但是,如果成功,则返回0 为什么?答案有两个:有两个函数的名称相似,前者被记录在案,后者没有记录在案。第二部分是,似乎有效的假设,即他们将表现相同,这不是一个有效的

所以,我必须承认我已经知道答案了。我这样问是为了让碰巧遇到相同问题的其他人能够找到解决由错误文档引起的问题的方法

我的环境是VS 2015 C++,WxWIDGuest3.0.2,在Windows 7上开发。 在一些遗留代码中,没有检查对wxMkDir的调用是否成功。根据,wxMkDir的返回类型为bool,如果成功,则返回true。但是,如果成功,则返回0


为什么?

答案有两个:有两个函数的名称相似,前者被记录在案,后者没有记录在案。第二部分是,似乎有效的假设,即他们将表现相同,这不是一个有效的假设

未记录的函数wxMkDir映射到wxCRT_MkDir,后者依次映射到wxCRT_MkDirA,然后映射到wxPOSIX_IDENT(MkDir),后者为所提到的POSIX函数MkDir创建一个依赖于平台的名称。根据

成功完成后,mkdir()将返回0。否则返回-1,不创建目录,设置errno表示错误

因此,条件句如:

if (!wxMkDir(newDir)) {
  // handle the error here
}
将失败,但:

if (wxMkDir(newDir) != 0) {
  // handle the error here
}
将根据目录是否已创建而按预期工作


有文档记录的函数wxMkdir在wx源文件filefn.cpp中实现,并利用mkdir,但使用类似于上述的条件映射到相应的bool返回值。

答案有两个:有两个函数具有相似的名称,前者被文档记录,后者未被文档记录。第二部分是,似乎有效的假设,即他们将表现相同,这不是一个有效的假设

未记录的函数wxMkDir映射到wxCRT_MkDir,后者依次映射到wxCRT_MkDirA,然后映射到wxPOSIX_IDENT(MkDir),后者为所提到的POSIX函数MkDir创建一个依赖于平台的名称。根据

成功完成后,mkdir()将返回0。否则返回-1,不创建目录,设置errno表示错误

因此,条件句如:

if (!wxMkDir(newDir)) {
  // handle the error here
}
将失败,但:

if (wxMkDir(newDir) != 0) {
  // handle the error here
}
将根据目录是否已创建而按预期工作

有文档记录的函数wxMkdir是在wx源文件filefn.cpp中实现的,它利用mkdir,但带有类似于上面的条件来映射到适当的bool返回值。

wxMkdir()
wxMkdir()
是wxWidgets提供的一般规则的不幸而丑陋的例外所有标准函数的包装器(在实践中,ANSI C或POSIX as都是标准函数,而不仅仅是C99)函数
foo()
存在于窄(
char*
)和宽(
wchar\t*
)版本中

因此,根据这条一般规则,您希望
wxMkdir()
的行为与
std::mkdir()
一样,但不幸的是
wxMkdir()
早于,wxWidgets的Unicode标准化,因此该规则无法为其实现,因为向后兼容,必须发明另一个函数作为
std::mkdir()
的包装器

当然,到目前为止,向后兼容性的分量更重了,在这里似乎真的没有什么合理的做法——除了建议人们使用它之外,这是明确的

wxMkdir()
wxMkdir()
是wxWidgets为所有标准函数提供
wxFoo()
存在于窄(
char*
)和宽(
wchar\t*
)版本中

因此,根据这条一般规则,您希望
wxMkdir()
的行为与
std::mkdir()
一样,但不幸的是
wxMkdir()
早于,wxWidgets的Unicode标准化,因此该规则无法为其实现,因为向后兼容,必须发明另一个函数作为
std::mkdir()
的包装器

当然,到目前为止,向后兼容性的分量更重了,在这里似乎真的没有什么合理的做法——除了建议人们使用它之外,这是明确的


谢谢您提供的信息。有时候,理解为什么事情会变成现在这样,而不是被留下来编造,这是很有帮助的。因此,投票结果如下:谢谢你的信息。有时候,理解为什么事情会变成现在这样,而不是被留下来编造,这是很有帮助的。因此,投票结果如下: