当我向gcc添加std=c99标志时,fileno、F_LOCK和F_ULOCK将变得未声明且不可用
我在c代码中有这些标题当我向gcc添加std=c99标志时,fileno、F_LOCK和F_ULOCK将变得未声明且不可用,c,gcc,c99,C,Gcc,C99,我在c代码中有这些标题 #include <stdio.h> #include <unistd.h> #包括 #包括 在我将-std=c99标志添加到gcc命令(以启用)之前,一切都编译得很好。这引发了以下错误 警告:隐式声明 函数fileno 错误:F_锁未声明(首次使用 在该功能中) 错误:(每个未声明的标识符都是 仅报告一次错误: 对于每个功能,它都显示在。) 错误:F_ULOCK未声明(首次使用 在这个函数中 有没有解决这些错误/警告的方法?您需要告诉标题您想
#include <stdio.h>
#include <unistd.h>
#包括
#包括
在我将-std=c99标志添加到gcc命令(以启用)之前,一切都编译得很好。这引发了以下错误
警告:隐式声明
函数fileno
错误:F_锁
未声明(首次使用
在该功能中)错误:(每个未声明的标识符都是 仅报告一次错误: 对于每个功能,它都显示在。)
错误:
F_ULOCK
未声明(首次使用
在这个函数中
有没有解决这些错误/警告的方法?您需要告诉标题您想要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
或其他类似机制来实现相同的效果。您可以尝试使用-D_BSD_SOURCE启用BSD isms,或者使用-D_SVID_SOURCE启用System-V isms尝试
-std=gnu99
在MacOS X上使用
-D_DARWIN_C_SOURCE
;在Solaris上使用-D_extensions__
;在Linux上使用-D_GNU_SOURCE
;列表继续(不确定HP-UX和AIX上的等价物是什么,但它们几乎肯定存在)。