c - 即使在函数中使用 <dirent.h> 头文件,“DT_REG 未声明”

标签 c linux ubuntu unix

我在引用 DT_REG 的函数中使用 头文件,但是,我收到错误消息“'DT_REG'未声明(在此函数中首次使用)”

代码片段是:

  DIR * dirp;
  struct dirent * entry;
  dirp = opendir(path);
  if(entry->d_type == DT_REG) { //.... }

在我的 makefile 中,我使用“cc -std=c11 -Wall -Werror -pedantic”。

有什么想法吗?

最佳答案

DT_REG 不是 ISO C11 扩展的一部分。严格设置 -std=c11 仅启用 C11 标准中定义的功能。

您可以使用feature macros启用额外的扩展。如readdir manual提到,您需要 _DEFAULT_SOURCE 宏来启用文件类型常量。

您可以在包含 dirent.h 之前在源代码中执行此操作

#define _DEFAULT_SOURCE
#include <dirent.h>

或通过命令行作为编译器选项

cc -std=c11 -D_DEFAULT_SOURCE -Wall -Werror -pedantic

关于c - 即使在函数中使用 <dirent.h> 头文件,“DT_REG 未声明”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69689586/

相关文章:

c - 扩展 C-Shell 程序和 chdir() 无法正常工作

我可以 'extend' C 中的结构吗?

c - 为什么这个函数会无限循环?

python - 在 Amazon EC2 中,当我 "clone"该实例时,如何让它运行 python 脚本?

linux - 我的 svn 状态显示 “G” 。我该如何解决?

python - 我在端口 8000 :80, 上的 apache+docker 上运行 django 应用程序需要用另一个端口运行另一个应用程序但不工作

c - 输出位置与原始文本发生变化

linux - 根据唯一时间戳对目录中的文件进行排序并将它们分组

c++ - 如何在 Ubuntu 中从命令行将 Qt 控制台输出存储到文本文件中

ubuntu - 为什么这个 SDL2 图形代码在 Kubuntu 18.04 中不能按预期工作?