为啥没有 cdirent 或 sys/cstat

Posted

技术标签:

【中文标题】为啥没有 cdirent 或 sys/cstat【英文标题】:Why is there no cdirent or sys/cstat为什么没有 cdirent 或 sys/cstat 【发布时间】:2015-01-30 06:51:08 【问题描述】:

我正在编写一个 C++ 代码,它遍历目录的所有条目并决定使用dirent.h。由于我使用的是 C++,因此我决定使用 C++ 标准来包含 C 库文件 [即在库名称前加上 c 前缀并删除末尾的 .h]

在不添加任何功能的情况下,我决定编译我的程序一次,看看是否真的存在cdirentsys/cstat。 g++ 抛出一个错误,告诉我这些文件不存在

#include <iostream>
#include <cdirent>
#include <sys/cstat>
#include <sys/ctypes>

using namespace std;

int main()




dummy.cpp:2:19: error: cdirent: No such file or directory
dummy.cpp:3:21: error: sys/cstat: No such file or directory
dummy.cpp:4:22: error: sys/ctypes: No such file or directory

按照page 中给出的关于在哪里查找标准 C++ 头文件的建议,我可以找到 cstdiocstdlibctime 等,这让我想到了我的问题

    C 标准库文件何时转换为 C++ 标准库文件? 应如何在程序中包含此类文件?这里的page 只讲标准头文件和非标准头文件。但我相信dirent.h 是一个标准库文件[如果我错了,请纠正我]

提前感谢所有建议

【问题讨论】:

使用 Boost 文件系统,而不是 Posix 文件。 Boost 文件系统计划包含在 C++14(当前标准)的标准库中,但我记得它没有被添加。它肯定会在 C++17 中出现,然后希望删除那些愚蠢的错误。 【参考方案1】:

dirent.hsys/stat.h 是 POSIX/SUS 标头而不是标准 C/C++ 标头,因此不遵守标准 C++ 规则。

【讨论】:

它们也比 C++ 标准早了十年甚至更多。至于为什么 POSIX 没有定义 C++ 接口,这是一个更难回答的问题。也许应该鼓励 Boost 这样做? @JonathanLeffler:Boost 已经有一个文件系统子库。 如何包含它们?我需要用extern "C" 或其他东西包装它们吗?

以上是关于为啥没有 cdirent 或 sys/cstat的主要内容,如果未能解决你的问题,请参考以下文章

电脑主机拿去修了以后为啥音响没声音了

为啥微信H5没有声音

为啥点SETUP安装程序没有反应

为啥jenkins设置了定时构建但没触发?

为啥,我注册软件时没有收到验证码呢?

为啥 volatile 在多线程 C 或 C++ 编程中没有用?