问题描述
今天,我不得不使用基本名()
功能,而男子3基名
()给了我一些奇怪的消息:
Today I had to use the basename()
function, and the man 3 basename
(here) gave me some strange message:
备注
有两种不同版本的基名()的的 - 在 POSIX 上述版本,并在 GNU版本,之后,一个得到
There are two different versions of basename() - the POSIX version described above, and the GNU version, which one gets after
的#define _GNU_SOURCE
结果
的#include<&string.h中GT;
我不知道这是什么的#define _GNU_SOURCE
表示:这是的污点的的code我用GNU样写许可?或者它只是用来告诉编译器像的好了,我知道,这组函数是不是POSIX,因此不便于携带,但我想无论如何要使用它的。
I'm wondering what this #define _GNU_SOURCE
means: is it tainting the code I write with a GNU-like license? Or is it simply used to tell the compiler something like "Well, I know, this set of functions is not POSIX, thus not portable, but I'd like to use it anyway".
如果是这样,为什么不给,而不必定义一些模糊的环境变量得到一个函数实现或其他人不同的页眉,?
If so, why not give people different headers, instead of having to define some obscure environment variable to get one function implementation or the other?
东西也是我的错误:编译器如何知道哪些功能实现与可执行链接?是否使用的#define
以及
Something also bugs me: how does the compiler know which function implementation to link with the executable? Does it use this #define
as well?
任何人有一些指点我?
推荐答案
定义 _GNU_SOURCE
无关凭许可证和一切与写作(非)便携式$ C $℃。如果定义 _GNU_SOURCE
,您将获得:
Defining _GNU_SOURCE
has nothing to do with license and everything to do with writing (non-)portable code. If you define _GNU_SOURCE
, you will get:
- 获得大量的非标准的GNU / Linux的扩展功能
- 访问权限,从POSIX标准省略传统功能(通常有很好的理由,如替换为更好的选择,或者被捆绑到特定的传统实现)
- 获得低级别的功能,即不能随身携带,但有时需要实现系统的实用工具,比如
安装
,使用ifconfig
等 - 破碎行为大量POSIX指定的函数,其中,GNU乡亲标准委员会不同意的职能应该如何表现,决定做自己的事情。
只要你意识到这些东西,它不应该是一个问题来定义 _GNU_SOURCE
,但是你应该避免定义它,而是定义 = _POSIX_C_SOURCE 200809L
或 _XOPEN_SOURCE = 700
时,可确保你的程序是可移植的。
As long as you're aware of these things, it should not be a problem to define _GNU_SOURCE
, but you should avoid defining it and instead define _POSIX_C_SOURCE=200809L
or _XOPEN_SOURCE=700
when possible to ensure that your programs are portable.
特别是,从 _GNU_SOURCE
的事情,你应该的从不的使用是#2和#以上4。
In particular, the things from _GNU_SOURCE
that you should never use are #2 and #4 above.
这篇关于&是什么QUOT;#定义_GNU_SOURCE"意味着?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!