我在 ac 代码中有这些标题
#include <stdio.h>
#include <unistd.h>
在我将 -std=c99 标志添加到 gcc 命令(以启用restrict)之前,一切都编译得很好。这触发了以下错误。
警告:函数的隐式声明
fileno
错误:
F_LOCK
未声明(在此函数中首次使用)
错误:(每个未声明的标识符仅报告一次错误:对于它出现的每个函数。)
错误: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
在编译器命令行或其他类似机制上实现相同的效果。
尝试
-std=gnu99
启用所有扩展并仍然使用 C99 语言增强功能。
您可以尝试 -D_BSD_SOURCE 来启用 BSD-isms 或 -D_SVID_SOURCE 来启用 System-Visms