- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在将软件项目的一些操作系统相关功能从 Linux 移植到 FreeBSD。因此,如果在 FreeBSD 10.1 上定义了 _POSIX_C_SOURCE=200809L
,我使用 getpagesize
发现了以下问题。
我创建了一个小测试程序
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv)
{
int i = getpagesize();
return 0;
}
如果我编译使用的是
cc test.c -o test
它编译时没有任何警告。但是如果我定义 _POSIX_C_SOURCE=200809L
(我在代码的其他部分需要的 getline
函数的正确 POSIX 定义的结果)我得到:
cc test.c -D_POSIX_C_SOURCE=200809L
test.c:5:10: warning: implicit declaration of function 'getpagesize' is invalid in C99 [-Wimplicit-function-declaration]
int i = getpagesize();
^
尽管我按照 getpagesize
的联机帮助页中的说明包含了 unistd.h
。如何在仍定义的 _POSIX_C_SOURCE
的情况下编译代码而不发出警告?
最佳答案
(1) _POSIX_C_SOURCE
是一个错误的定义。您需要_XOPEN_SOURCE
。例如:
cc -D_XOPEN_SOURCE=700 test.c
或
cc -D_XOPEN_SOURCE=600 test.c
600
和 700
表示您的应用程序期望从系统库获得的单一 Unix 规范(简称 SUS,又名开放组规范,又名 POSIX)的版本。 See here for the SUSv7.
(2)但是。这可能仍然不起作用,因为 getpagesize()
是 BSD 特定的函数,如果您尝试在 POSIX 兼容模式下编译该文件,它实际上可能会被隐藏。
通常您不需要任何特殊的东西来访问 BSD 系统上的 BSD 函数,但可移植的方法是提供 _BSD_SOURCE
定义。
获取页面大小的更便携、符合 POSIX 标准的方法是 sysconf(_SC_PAGE_SIZE)
功能。 FreeBSD man page .
附注手头没有 BSD 来测试它。
关于c - FreeBSD:隐式声明 getpagesize 并定义 _POSIX_C_SOURCE=200809L。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29797547/
例如,假设我想使用结构 timespec ,它在 time.h 中定义。根据联机帮助页,我只需要包含 time.h。但是在 c99 中编译时,这还不够: #include #include str
我不得不维护一些 C 项目,这些项目也应该在旧平台上编译。目前,对于某些平台,定义了宏 _POSIX_C_SOURCE。我想知道 - 如果定义它是可以接受的,我不应该总是在所有平台上定义它吗?也许具有
(从 this question 中分离出来) 以下 3 个宏出现在许多 C 源文件中,它们试图检测/依赖 POSIX 的可用性。功能: _POSIX_SOURCE _POSIX_C_SOURCE _
我目前正在将软件项目的一些操作系统相关功能从 Linux 移植到 FreeBSD。因此,如果在 FreeBSD 10.1 上定义了 _POSIX_C_SOURCE=200809L,我使用 getpag
更新 原来我的讲师会接受按照 GNU99 标准编写的代码,所以,正如 User1 指出的那样,我使用了 _GNU_SOURCE在我的程序开始时。 (有关更多信息,请参阅 man feature_tes
当我使用“POSIX 间隔计时器”或进行信号处理时,我必须插入 #define _POSIX_C_SOURCE 200809L 在我的任何文件中的第 1 行。但我发现只有 C 代码需要它,而 C++
我一直在编写一个旨在在终端上写入非英文字符的 Linux 程序,我最近将其移植到 Windows,并且在尝试更改代码页和终端的字体,具有先前定义的符号常量 _POSIX_C_SOURCE 似乎改变了代
我是一名优秀的程序员,十分优秀!