c语言 - 'DT_REG Undeclared'即使在函数中使用<dirent.h>头文件



我用的是<头文件中的函数,我引用DT_REG,然而,我得到错误,说&quot;'DT_REG'未声明(在此函数中首次使用)&quot;>

代码片段是:

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标准中定义的特性。

你可以使用特性宏来启用额外的扩展。正如readdir手册中提到的,您需要_DEFAULT_SOURCE宏来启用文件类型常量。

在包含dirent.h

之前,您可以在源代码中执行此操作
#define _DEFAULT_SOURCE
#include <dirent.h>

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

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

相关内容