gpt4 book ai didi

c - scandir 的隐式声明; alphasort 未声明

转载 作者:行者123 更新时间:2023-12-04 00:40:20 26 4
gpt4 key购买 nike

我正在尝试使用 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旗帜。

我是不是忽略了什么?我不明白为什么它无法编译。

最佳答案

如果您使用 -std=c99,则只有严格属于 C99 标准一部分的函数才会包含在头文件中。 scandir() 不在 C99 标准中。因此,您必须设置一个预处理器变量以确保包含函数原型(prototype)。例如,scandir() 的手册页指示在执行 #include< 之前设置 _BSD_SOURCE_SVID_SOURCE 预处理器变量 将解决问题。或者,您可以使用 #define _GNU_SOURCE,它会依次为您设置许多不同的变量(包括 _BSD_SOURCE_SVID_SOURCE)。

您的代码仍会在出现警告的情况下编译并正常工作,因为 C 允许您使用隐式定义的函数进行编译,并且链接器会正确地将对 scandir() 的调用链接到正确的函数。

关于c - scandir 的隐式声明; alphasort 未声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19439855/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com