为啥没有 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]
在不添加任何功能的情况下,我决定编译我的程序一次,看看是否真的存在cdirent
或sys/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++ 头文件的建议,我可以找到 cstdio
、cstdlib
、ctime
等,这让我想到了我的问题
-
C 标准库文件何时转换为 C++ 标准库文件?
应如何在程序中包含此类文件?这里的page 只讲标准头文件和非标准头文件。但我相信
dirent.h
是一个标准库文件[如果我错了,请纠正我]
提前感谢所有建议
【问题讨论】:
使用 Boost 文件系统,而不是 Posix 文件。 Boost 文件系统计划包含在 C++14(当前标准)的标准库中,但我记得它没有被添加。它肯定会在 C++17 中出现,然后希望删除那些愚蠢的错误。 【参考方案1】:dirent.h
和 sys/stat.h
是 POSIX/SUS 标头而不是标准 C/C++ 标头,因此不遵守标准 C++ 规则。
【讨论】:
它们也比 C++ 标准早了十年甚至更多。至于为什么 POSIX 没有定义 C++ 接口,这是一个更难回答的问题。也许应该鼓励 Boost 这样做? @JonathanLeffler:Boost 已经有一个文件系统子库。 如何包含它们?我需要用extern "C"
或其他东西包装它们吗?以上是关于为啥没有 cdirent 或 sys/cstat的主要内容,如果未能解决你的问题,请参考以下文章