Answers:
当你做
#define _XOPEN_SOURCE <some number>
要么
cc -D_XOPEN_SOURCE=<some number>
它告诉您的编译器包括X / Open和POSIX标准中定义的一些其他功能的定义。
这将为您提供一些额外的功能,这些功能在最新的UNIX / BSD / Linux系统上存在,但在其他系统(例如Windows)上可能不存在。
这些数字表示标准的不同版本。
您可以通过查看调用的每个函数的手册页来确定需要哪一个(如果有)。
例如,man strdup
说:
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
strdup(): _SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500
strndup(), strdupa(), strndupa(): _GNU_SOURCE
这意味着您应该输入以下内容之一:
#define _SVID_SOURCE
#define _BSD_SOURCE
#define _XOPEN_SOURCE 500
#define _XOPEN_SOURCE 600
#define _XOPEN_SOURCE 700
#include
如果要使用,请在源文件的顶部将其置于任何位置strdup
。
或者你可以放
#define _GNU_SOURCE
而是启用了所有功能,但缺点是它可能无法在Solaris,FreeBSD,Mac OS X等上编译。
这是一个好主意,做前要检查每一个人网页#include
,#define
或使用新的功能,因为有时候他们的行为取决于哪些选项的变化和#define
你得了,例如与基名(3) 。
也可以看看:
-D
是ac编译器选项,用于定义预处理程序变量。在这种情况下_XOPEN_SOURCE
。
这实际上并不会影响编译器本身的行为,而是会更改某些库(例如标准c库)的行为。有几种这样的选择。在大多数情况下,它们与有关某些特定于UNIX的编程接口或某些特定的库供应商的标准文档有关。
有时必须定义其中之一,因为某些标准功能的行为甚至其签名在不同标准之间可能会有所不同。因此,您可能必须使用-D_XOPEN_SOURCE
或类似方式才能打开兼容模式。
这些标志的另一种可能用法是通过转换C库实现提供的扩展来确保源代码在特定标准的范围内。这是可以用来确保代码在尽可能多的平台上运行的措施之一。