【问题标题】: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 等,这让我想到了我的问题

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

提前感谢所有建议

【问题讨论】:

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

标签: c++ c linux


【解决方案1】:

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

【讨论】:

  • 它们也比 C++ 标准早了十年甚至更多。至于为什么 POSIX 没有定义 C++ 接口,这是一个更难回答的问题。也许应该鼓励 Boost 这样做?
  • @JonathanLeffler:Boost 已经有一个文件系统子库。
  • 如何包含它们?我需要用extern "C" 或其他东西包装它们吗?
猜你喜欢
  • 2014-10-06
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-17
  • 2019-12-05
相关资源
最近更新 更多