概念

详细的信息可查看Linux手册
man feature_test_macros
从GNU的文档中:

Macro: _GNU_SOURCE
If you define this macro, everything is included: ISO C89, ISO C99, POSIX.1, POSIX.2, BSD, SVID, X/Open, LFS, and GNU extensions. In the cases where POSIX.1 conflicts with BSD, the POSIX definitions take precedence.

Linux手册中:

_GNU_SOURCE
Defining this macro (with any value) implicitly defines _ATFILE_SOURCE, _LARGEFILE64_SOURCE, _ISOC99_SOURCE, _XOPEN_SOURCE_EXTENDED, _POSIX_SOURCE, _POSIX_C_SOURCE with the value 200809L (200112L in glibc versions before 2.10; 199506L in glibc versions before 2.5; 199309L in glibc ver‐ sions before 2.1) and _XOPEN_SOURCE with the value 700 (600 in glibc versions before 2.10; 500 in glibc versions before 2.2). In addition, various GNU-specific extensions are also exposed.
Since glibc 2.19, defining _GNU_SOURCE also has the effect of implicitly defining _DEFAULT_SOURCE. In glibc versions before 2.20, defining _GNU_SOURCE also had the effect of implicitly defining _BSD_SOURCE and _SVID_SOURCE.

注意:_GNU_SOURCE_必须在头文件前定义~

#define _GNU_SOURCE#include <stdio.h>
#include <stdlib.h>
...

抑或是使用
gcc -D_GNU_SOURCE file.c

用途

若定义了_GNU_SOURCE_,则:

  1. access to lots of nonstandard GNU/Linux extension functions
  2. access to traditional functions which were omitted from the POSIX standard (often for good reason, such as being replaced with better alternatives, or being tied to particular legacy implementations)
  3. access to low-level functions that cannot be portable, but that you sometimes need for implementing system utilities like mount, ifconfig, etc.
  4. broken behavior for lots of POSIX-specified functions, where the GNU folks disagreed with the standards committee on how the functions should behave and decided to do their own thing.

编译器如何实现该机制

编译器如何知道哪个函数实现与可执行文件链接?
一种常见的方法是根据是否定义了_GNU_SOURCE,有条件地将标识符basename定义为不同的名称。 例如:

#ifdef _GNU_SOURCE
# define basename __basename_gnu
#else
# define basename __basename_nongnu
#endif

现在,库只需要在这些名称下提供这两种行为即可

【编程基础の基础】“#define _GNU_SOURCE“或是在编译时“-D _GNU_SOURCE“代表了什么?有什么用相关推荐

  1. 在jni编程中解决第三方so文件编译时被删除的另类方法

    最近在做jni方面的一些尝试,在eclipse下,参考网上的教程,配置了NDK,期间好多小坑,多亏网上牛逼的前辈们给出了这样那样的解决方案,试一试,总有一款能够解决我的问题.但是当我成功配置好NDK, ...

  2. 浅谈Java异常及其编译时异常和运行时异常的区别

    异常是程序编码和运行时经常发生的事件,了解异常有助于我们提高代码质量,增强系统的健壮性,这里总结一下Java编程中的异常.以及Java编译时异常和运行时异常的区别,并列举几种常见的异常,以供参考学习. ...

  3. Linux C 编程开发环境(工具链,编译,汇编,链接,库)基础知识与实践

    前言 本博文包括对下面书籍的学习笔记,以及实际上机编程练习,程序运行分析等的总结,作为日后工作的参考: <UNIX 环境高级编程(第三版)> <深度探索 Linux 操作系统:系统构 ...

  4. Linux系统编程——进程基础知识

    Linux系统编程--进程基础知识 1.程序和进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu.内存.打开的文件.设备.锁-) 进程,是一个抽象的概念,与操作系统原理联系紧密.进程 ...

  5. python编程零基础-编程零基础应当如何开始学习 Python?

    看到问题关于<编程零基础应当如何开始学习 Python?>,其实是在Python未来会很火的一个基础条件下,但是我觉得光光说学习Pyhon这件事,你首先得明白三件事: --如何判断你学习编 ...

  6. 高等学校计算机科学与技术教材:tcp/ip网络编程技术基础,TCP/IP网络编程技术基础...

    TCP/IP网络编程技术基础 语音 编辑 锁定 讨论 上传视频 <TCP/IP网络编程技术基础>是2012年北京交通大学出版社出版的图书,作者是王雷. 书    名 TCP/IP网络编程技 ...

  7. c语言python零基础教学_编程零基础应当如何开始学习 Python?

    目录 1.学习了解Python的基础知识. 2.安装Python,边学边练. 3.收集资料,作为练习指引. 4.确定学习方向,项目练手. 5.学习过程中要注意多练.多问! 编程零基础选择Python开 ...

  8. System Verilog面向对象编程(OPP)基础——类(class)的基本使用

    该文主要是笔者梳理绿皮书对应章节的内容 System Verilog面向对象编程OPP基础--类(class)的基本使用 面向对象编程 概述 考虑名词而非动词 编写第一个类class OOP术语 创建 ...

  9. Python基础了解 python自带IDLE编译

    目录 学习小标 学习产出: 前言 一.Python版本 二.语言运用的占比 2021年 6 月编程语言排行榜前 20名 三.Python的应用 1.Web开发 2.网络爬虫 3.大数据处理 4.人工智 ...

最新文章

  1. 【JavaScript】出现即使设置了ID也获取不到的可能原因与window.onload
  2. android Q gradle配置,【Android】Android Studio启动配置gradle
  3. Angular常用命令行和指令
  4. 华为手机显示解析服务器返回错误,ajax服务器返回错误
  5. 如何下载php-5.5.38.tar.gz_搭建PHP服务器php-5.3.28.tar.gz
  6. JAVA 简单的抽奖程序
  7. delphi控件切图界面闪烁_先本设计教你跳过UI小程序的七个坑
  8. 云图说|初识云数据库GaussDB(for Redis)
  9. Linux——系统引导流程学习简单笔记
  10. C++学习之 delete 构造器
  11. 更新linux gcc版本到gcc 4.4.2
  12. Jeff Dean的传奇人生:超级工程师们拯救谷歌
  13. Word - 修改界面语言和校对语言
  14. java的8年来工作汇总
  15. 期货业-期货市场的产生
  16. 明月当空照,python3D编程初阶:坐标、模型、纹理与光
  17. hp服务器进智能配置是红屏,illegal opcode 红屏报错(hp 360 G6安装win2003)问题解决方法...
  18. html 文字段后间距怎么设置,p字间距 html段落内文字设置字间距间隔
  19. 桌面便利贴软件下载 电脑桌面便签小工具软件下载
  20. 通过redis-cli批量删除多个指定模式的key

热门文章

  1. 解决 Hyper-V R2 虚拟网卡影响网速变慢问题
  2. 弄懂 JavaScript 执行机制,宏任务和微任务
  3. Canvas 画布中坐标系的位置问题(原点确定)
  4. UVA 1647 Computer Transformation
  5. 最新版继续教育学习软件下载地址
  6. Blender 画正四面体
  7. 2021年三季度中国家居用品行业A股上市企业营收排行榜:欧派家居、顾家家居排名前2位,且近五年第三季度的净利润均逐年递增(附热榜TOP61详单)
  8. python余数不等于的符号_Python扫盲,看完这篇,你的Python基础就差不多了
  9. ssh远程出错Add correct host key in /home/xxx/.ssh/known_hosts to get rid of this message
  10. 门诊地图导航怎么做,零成本的医院室内导航解决方案