我在 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/