有关可以全部启用的确切详细信息_GNU_SOURCE
,文档可以提供帮助。
从GNU文档中:
巨集:_GNU_SOURCE
如果定义此宏,则将包括所有内容:ISO C89,ISO C99,POSIX.1,POSIX.2,BSD,SVID,X / Open,LFS和GNU扩展。在POSIX.1与BSD冲突的情况下,POSIX定义优先。
从功能测试宏的Linux手册页中:
_GNU_SOURCE
定义此宏(具有任何值)将隐式定义_ATFILE_SOURCE,_LARGEFILE64_SOURCE,_ISOC99_SOURCE,_XOPEN_SOURCE_EXTENDED,_POSIX_SOURCE,_POSIX_C_SOURCE,其值分别为200809L(在2.10 2.1之前的glibc版本中的200112L在glibc中;在2001年之前的glibc版本中是2001年的glibc版本中的200112L; 199506L的版本是早于glibc的glibc版本中的1995年版本); _XOPEN_SOURCE的值为700(在2.10之前的glibc版本中为600;在2.2之前的glibc版本中为500)。此外,还公开了各种特定于GNU的扩展。
从glibc 2.19开始,定义_GNU_SOURCE也具有隐式定义_DEFAULT_SOURCE的作用。在2.20之前的glibc版本中,定义_GNU_SOURCE也具有隐式定义_BSD_SOURCE和_SVID_SOURCE的作用。
注意:_GNU_SOURCE
需要在包含头文件之前进行定义,以便相应的头启用功能。例如:
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
...
_GNU_SOURCE
也可以使用-D
标志启用每个编译:
$ gcc -D_GNU_SOURCE file.c
(-D
不特定_GNU_SOURCE
于此,而是以这种方式定义任何宏)。
_GNU_SOURCE
是为了获得strfry
和memfrob
。