我正在尝试使用scandir
打印当前目录中的文件列表。当我尝试编译时,我收到以下错误和警告:
warning: implicit declaration of function ‘scandir’ [-Wimplicit-function-declaration]
error: ‘alphasort’ undeclared (first use in this function)
note: each undeclared identifier is reported only once for each function it appears in
我包括<dirent.h>
,据我所知应该定义scandir()
以及所有相关功能。我的代码中没有看到任何错误:
#include <dirent.h>
...
int printFiles(){
struct dirent **nameList;
int numOfFiles = scandir(".", &nameList, 0, alphasort);
//TODO print file names
return numOfFiles;
}
....
我正在运行 Ubuntu 12.04,并且正在使用以下命令进行编译gcc
与-c99
flag.
我只是忽略了一些事情吗?我不明白为什么它无法编译。
如果你使用-std=c99
,只有严格属于 C99 标准一部分的函数才包含在头文件中。scandir()
不在C99标准中。因此,您必须设置一个预处理器变量以确保包含函数原型。例如,手册页scandir()
表示设置_BSD_SOURCE
or _SVID_SOURCE
在执行之前的预处理器变量#include
将解决问题。或者,您可以使用#define _GNU_SOURCE
这反过来会为你设置很多不同的变量(包括_BSD_SOURCE
and _SVID_SOURCE
).
您的代码仍将在出现警告的情况下进行编译并正常工作,因为 C 允许您使用隐式定义的函数进行编译,并且链接器将正确地将调用链接到scandir()
到适当的功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)