【编程基础の基础】“#define _GNU_SOURCE“或是在编译时“-D _GNU_SOURCE“代表了什么?有什么用
概念
详细的信息可查看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_
,则:
- access to lots of nonstandard GNU/Linux extension functions
- 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)
- access to low-level functions that cannot be portable, but that you sometimes need for implementing system utilities like mount, ifconfig, etc.
- 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“代表了什么?有什么用相关推荐
- 在jni编程中解决第三方so文件编译时被删除的另类方法
最近在做jni方面的一些尝试,在eclipse下,参考网上的教程,配置了NDK,期间好多小坑,多亏网上牛逼的前辈们给出了这样那样的解决方案,试一试,总有一款能够解决我的问题.但是当我成功配置好NDK, ...
- 浅谈Java异常及其编译时异常和运行时异常的区别
异常是程序编码和运行时经常发生的事件,了解异常有助于我们提高代码质量,增强系统的健壮性,这里总结一下Java编程中的异常.以及Java编译时异常和运行时异常的区别,并列举几种常见的异常,以供参考学习. ...
- Linux C 编程开发环境(工具链,编译,汇编,链接,库)基础知识与实践
前言 本博文包括对下面书籍的学习笔记,以及实际上机编程练习,程序运行分析等的总结,作为日后工作的参考: <UNIX 环境高级编程(第三版)> <深度探索 Linux 操作系统:系统构 ...
- Linux系统编程——进程基础知识
Linux系统编程--进程基础知识 1.程序和进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu.内存.打开的文件.设备.锁-) 进程,是一个抽象的概念,与操作系统原理联系紧密.进程 ...
- python编程零基础-编程零基础应当如何开始学习 Python?
看到问题关于<编程零基础应当如何开始学习 Python?>,其实是在Python未来会很火的一个基础条件下,但是我觉得光光说学习Pyhon这件事,你首先得明白三件事: --如何判断你学习编 ...
- 高等学校计算机科学与技术教材:tcp/ip网络编程技术基础,TCP/IP网络编程技术基础...
TCP/IP网络编程技术基础 语音 编辑 锁定 讨论 上传视频 <TCP/IP网络编程技术基础>是2012年北京交通大学出版社出版的图书,作者是王雷. 书 名 TCP/IP网络编程技 ...
- c语言python零基础教学_编程零基础应当如何开始学习 Python?
目录 1.学习了解Python的基础知识. 2.安装Python,边学边练. 3.收集资料,作为练习指引. 4.确定学习方向,项目练手. 5.学习过程中要注意多练.多问! 编程零基础选择Python开 ...
- System Verilog面向对象编程(OPP)基础——类(class)的基本使用
该文主要是笔者梳理绿皮书对应章节的内容 System Verilog面向对象编程OPP基础--类(class)的基本使用 面向对象编程 概述 考虑名词而非动词 编写第一个类class OOP术语 创建 ...
- Python基础了解 python自带IDLE编译
目录 学习小标 学习产出: 前言 一.Python版本 二.语言运用的占比 2021年 6 月编程语言排行榜前 20名 三.Python的应用 1.Web开发 2.网络爬虫 3.大数据处理 4.人工智 ...
最新文章
- 【JavaScript】出现即使设置了ID也获取不到的可能原因与window.onload
- android Q gradle配置,【Android】Android Studio启动配置gradle
- Angular常用命令行和指令
- 华为手机显示解析服务器返回错误,ajax服务器返回错误
- 如何下载php-5.5.38.tar.gz_搭建PHP服务器php-5.3.28.tar.gz
- JAVA 简单的抽奖程序
- delphi控件切图界面闪烁_先本设计教你跳过UI小程序的七个坑
- 云图说|初识云数据库GaussDB(for Redis)
- Linux——系统引导流程学习简单笔记
- C++学习之 delete 构造器
- 更新linux gcc版本到gcc 4.4.2
- Jeff Dean的传奇人生:超级工程师们拯救谷歌
- Word - 修改界面语言和校对语言
- java的8年来工作汇总
- 期货业-期货市场的产生
- 明月当空照,python3D编程初阶:坐标、模型、纹理与光
- hp服务器进智能配置是红屏,illegal opcode 红屏报错(hp 360 G6安装win2003)问题解决方法...
- html 文字段后间距怎么设置,p字间距 html段落内文字设置字间距间隔
- 桌面便利贴软件下载 电脑桌面便签小工具软件下载
- 通过redis-cli批量删除多个指定模式的key
热门文章
- 解决 Hyper-V R2 虚拟网卡影响网速变慢问题
- 弄懂 JavaScript 执行机制,宏任务和微任务
- Canvas 画布中坐标系的位置问题(原点确定)
- UVA 1647 Computer Transformation
- 最新版继续教育学习软件下载地址
- Blender 画正四面体
- 2021年三季度中国家居用品行业A股上市企业营收排行榜:欧派家居、顾家家居排名前2位,且近五年第三季度的净利润均逐年递增(附热榜TOP61详单)
- python余数不等于的符号_Python扫盲,看完这篇,你的Python基础就差不多了
- ssh远程出错Add correct host key in /home/xxx/.ssh/known_hosts to get rid of this message
- 门诊地图导航怎么做,零成本的医院室内导航解决方案