我有简单的代码:
1 #include <ftw.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5
6 static int display_info(const char *fpath, const struct stat *sb, int tflag, struct FTW *ftwbuf){
7 printf("%-3s %2d %711d %-40s %d %s\n", tflag == FTW_D) ? "d" :
8 (tflag == FTW_DNR) ? "dnr" : (tflag == FTW_DP) ? "dp" : (tflag == FTW_F) ? "f" :
9 (tflag == FTW_DP) ? "dp" : (tflag == FTW_SL) ? "sl" : (tflag == FTW_SLN) ? "sln" : "?", ftwbuf->level, (long long) sb->st_size, fpath, ftwbuf->base, fpath + ftwbuf->base);
10 return 0;
11 }
12
13 int main (int argc, char ** argv){
14 int flags = 0;
15 if( argc > 2 && strchr(argv[2], 'd') != NULL) flags |= FTW_DEPTH;
16 if( argc > 2 && strch(argv[2], 'p') != NULL) flags |= FTW_PHYS;
17 nftw((argc < 2) ? "." : argv[1], display_info, 20, flags);
18
19 exit(EXIT_SUCCESS);
20 }
当我想编译时:
gcc -o main main.c
我遇到了一些问题:
main.c:8: błąd: `FTW_DP, undeclared (first use in this function)
我必须如何编译(使用某些库或什么?)
答案 0 :(得分:2)
您需要添加
#define _XOPEN_SOURCE 500
到代码的顶部。
这是一个很好的参考页面:
答案 1 :(得分:2)
你有3个解决方案:
高于#include <ftw.h>
,添加:
#define _XOPEN_SOURCE 500
#include <ftw.h>
// ...
(thx @alvits)在命令行中,添加:
gcc -D_XOPEN_SOURCE=500 ...
进入你的makefile:
CPPFLAGS := -D_OXPEN_SOURCE=500 ...
为什么需要这个定义?
从<ftw.h>
内部再到<features.h>
,您可以看到:
#ifdef _XOPEN_SOURCE
...
# if (_XOPEN_SOURCE - 0) >= 500
# define __USE_XOPEN_EXTENDED 1
在<ftw.h>
:
#ifdef __USE_XOPEN_EXTENDED
/* These flags are only passed from the `nftw' function. */
FTW_DP, /* Directory, all subdirs have been visited. */
# define FTW_DP FTW_DP