首页 > 解决方案 > 'DT_REG Undeclared' 即使在使用时函数中的头文件

问题描述

我在引用 DT_REG 的函数中使用 <dirent.h> 头文件,但是,我收到错误消息“'DT_REG' undeclared (first use in this function)”

代码片段是:

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

在我的生成文件中,我使用“cc -std=c11 -Wall -Werror -pedantic”。

任何想法的原因?

标签: clinuxubuntuunix

解决方案


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

您可以使用功能宏来启用其他扩展。正如readdir 手册所述,您需要_DEFAULT_SOURCE宏来启用文件类型常量。

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

#define _DEFAULT_SOURCE
#include <dirent.h>

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

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

推荐阅读