即使使用#include,编译器也无法识别 lstat

标签 c compiler-errors

 #include <sys/stat.h>
 #include <sys/types.h>
 #include <unistd.h>

 ...
 lstat(name, &st);
 ...

我正在使用 CodeBlocks 编写 C 程序。所有其他包括工作正常。我在网上查了一下,lstat 需要代码顶部列出的三个 include,但是当我尝试编译时,我仍然收到错误消息 warning: implicit declaration of function 'lstat'。我不知道出了什么问题。如果我需要包含任何额外信息才能获得帮助,请说明。

最佳答案

根据lstat(2):

glibc 的功能测试宏要求(请参阅 feature_test_macros(7)):

   lstat():
       _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
       || /* Since glibc 2.10: */ _POSIX_C_SOURCE >= 200112L

这意味着您需要定义这些功能测试宏之一才能使用 lstat(2)

因此,选择一个对您的代码有意义的功能测试宏,例如 _BSD_SOURCE,并在源文件的最开始(在包含任何头文件之前)定义它,或者您可以在编译器命令行上定义它,例如 -D_BSD_SOURCE for gcc

关于即使使用#include,编译器也无法识别 lstat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22851629/

相关文章:

c - 如何使用 Visual Studio 在 C 中将 Unicode 打印到输出控制台?

python - 为什么在python中声明 ' int '会引发错误

compiler-errors - 是否有 -Wall -Werror 的 rustc 等价物?

java - 使用javax.swing.ImageIcon显示我保存在目录中的jpg

c - 更改文本字体时标签标题被剪切(Open Motif 2.3.1)

c - 没有C库的最简单的随机数生成器?

c - 为什么大多数 C 开发人员使用 define 而不是 const?

c - 套接字创建失败的原因有哪些?

c++ - 类型转换运算符不用于强制转换,编译器不同

c++ - 从模板类切换时,为什么出现<错误类型>?