今天我不得不使用这个basename()功能,而man 3 basename(这里)给了我一些奇怪的信息:
笔记
有两个不同版本的basename() - 上面描述的POSIX版本,以及GNU版本,后者可以使用
#define _GNU_SOURCE
#include <string.h>
我想知道这#define _GNU_SOURCE意味着什么:它是否污染了我用GNU相关许可证编写的代码?或者它只是用于告诉编译器类似" 嗯,我知道,这组函数不是POSIX,因此不可移植,但我还是想用它 ".
如果是这样,为什么不给人们不同的标题,而不是必须定义一些模糊的宏来获得一个函数实现或另一个?
有些东西也让我感到困惑:编译器如何知道哪个函数实现与可执行文件链接?它也使用这个#define吗?
有人有一些指示可以给我吗?