当我向gcc添加std = c99标志时,fileno,F_LOCK和F_ULOCK变为未声明且不可用

时间:2009-09-14 18:29:00

标签: c gcc c99

我在c代码中有这些标题

#include <stdio.h>
#include <unistd.h>

在我将-std = c99 flag添加到gcc命令(启用restrict)之前,所有编译都很好。这引发了以下错误。

  

警告:隐式声明   函数fileno

     

错误:F_LOCK未声明(首次使用   在这个功能)
  错误:(每个未声明的标识符是   仅报告一次错误:   对于它出现的每个功能。)
  错误:F_ULOCK未声明(首次使用   在这个功能

有哪些想法可以解决这些错误/警告?

3 个答案:

答案 0 :(得分:8)

您需要告诉标题您想要POSIX扩展。这些天,我用:

#if __STDC_VERSION__ >= 199901L
#define _XOPEN_SOURCE 600
#else
#define _XOPEN_SOURCE 500
#endif /* __STDC_VERSION__ */

如果我正在使用-std=c89进行编译,则会提供正确的POSIX版本;如果使用-std=c89进行编译,则会提供正确的POSIX版本。我在Solaris 9和10,MacOS X(10.4.x,10.5.x),HP-UX 11.x,Linux(RHEL4和5,SuSE 9和10)以及AIX 5.x和6.x - AFAICR上使用它,到目前为止没有问题。

此节应该出现在包含任何系统头之前(在您自己的头文件中,或在每个源文件中),或者您需要在编译器命令行上使用-D_XOPEN_SOURCE=600或其他类似的实现相同的效果机构。

答案 1 :(得分:5)

尝试

-std=gnu99

启用所有扩展程序并仍然使用C99语言增强功能。

答案 2 :(得分:1)

您可以尝试-D_BSD_SOURCE启用BSD-isms或-D_SVID_SOURCE启用System-V isms

相关问题