C 未定义的DT_DIR

C 未定义的DT_DIR,c,c99,readdir,C,C99,Readdir,我想检查readdir返回的文件是否为目录。 我试着使用DT_DIR常量(正如manreaddir所说)来实现它,但它没有定义。我应该包含什么文件才能获取它 现在我用 #include <sys/types.h> #include <dirent.h> #include <stdlib.h> #include <errno.h> 您需要定义\u BSD\u SOURCE功能测试宏才能获得这些定义,它们不是标准的,在为C99编译时,GCC不定义该宏

我想检查
readdir
返回的文件是否为目录。 我试着使用
DT_DIR
常量(正如
manreaddir
所说)来实现它,但它没有定义。我应该包含什么文件才能获取它

现在我用

#include <sys/types.h>
#include <dirent.h>
#include <stdlib.h>
#include <errno.h>

您需要定义
\u BSD\u SOURCE
功能测试宏才能获得这些定义,它们不是标准的,在为C99编译时,GCC不定义该宏

gcc -std=c99 -D_BSD_SOURCE -Wall a.c

嗯,谢谢,这很有效。但我想这并不总是好的。改变这个常数,因为它可能改变其他东西。这是另一种方式吗?我自己的常量可以(我真的不这么认为)还是可以在其他操作系统上更改?(即4个目录)PS:
-D\u BSD\u SOURCE
就足够了,我们不需要在这里赋值使用
-D\u BSD\u SOURCE
不会更改任何常量。它引入了来自BSD的附加定义和函数,这些定义和函数不是POSIX或标准C。如果您的代码需要这些,那么它是不可移植的。如果希望它是可移植的,不要依赖于
struct dirent
d_type
字段,而是使用
stat
。硬编码
4
是个坏主意。
gcc -std=c99 -D_BSD_SOURCE -Wall a.c