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

时间:2014-04-04 00:54:33

标签: c compiler-errors

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

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

我正在使用CodeBlocks编写C程序。所有其他包括工作正常。我在网上查了一下,lstat需要在代码顶部列出的三个包含,但我仍然收到错误消息警告:当我尝试编译时隐式声明函数&#39; lstat&#39; 。我不知道出了什么问题。如果我需要包含任何额外信息以获得帮助,请说明。

2 个答案:

答案 0 :(得分:6)

根据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的{​​{1}}。

答案 1 :(得分:3)

lstat()不符合严格的ANSI标准。您应该使用您的编译器标志 -std = c99到-std = gnu99。这将包括所有基于Unix的系统。