5

我在 ac 代码中有这些标题

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

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

警告:函数的隐式声明fileno

错误:F_LOCK未声明(在此函数中首次使用)
错误:(每个未声明的标识符仅报告一次错误:对于它出现的每个函数。)
错误:F_ULOCK未声明(在此函数中首次使用)

解决这些错误/警告的任何想法?

4

3 回答 3

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在编译器命令行或其他类似机制上实现相同的效果。

于 2009-09-14T18:48:02.593 回答
4

尝试

-std=gnu99

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

于 2009-09-14T20:33:24.867 回答
1

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

于 2009-09-14T18:53:41.770 回答