c - 当我将 std=c99 标志添加到 gcc 时,fileno、F_LOCK 和 F_ULOCK 变得未声明和不可用

标签 c gcc c99

我在 C 代码中有这些 header

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

在我将 -std=c99 标志添加到 gcc 命令(以启用 restrict )之前,一切都编译得很好。这触发了以下错误。

warning: implicit declaration of function fileno

error: F_LOCK undeclared (first use in this function)
error: (Each undeclared identifier is reported only once error: for each function it appears in.)
error: F_ULOCK undeclared (first use in this function

有解决这些错误/警告的想法吗?

最佳答案

您需要告诉 header 您想要 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 来达到同样的效果线,或其他一些类似的机制。

关于c - 当我将 std=c99 标志添加到 gcc 时,fileno、F_LOCK 和 F_ULOCK 变得未声明和不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1423185/

相关文章:

c - 如何计算字符串中的字符数(如果没有占用所有空间)

c - 查找并打印带有空格或制表符分隔符的字符串的最后一个单词

c - 如何使用终端在 gcc 中启用 c99 模式

c++ - 警告 : second argument of ‘int main(int, char***)’ should be ‘char **’ [-Wmain] (GNU C++ compiler; Ubuntu 12. 10)

c - 即使链接具有定义的库后,也会出现“未定义的函数引用”问题

c - 为什么有些 C 标准头文件以 'std' 开头,而有些则不是?

基于整数大小的指针类型转换 (C99)

c - 如何读取文件并将其正确打印在数组中?

c - 编译后偶尔会死机

C 链表只包含第一个元素......不知道剩下的会发生什么