gcc

GCC, the GNU Compiler Collection - GNU Project - Free Software Foundation (FSF) http://gcc.gnu.org/

The GNU Compiler Collection includes front ends for CC++, Objective-C, Fortran, Ada, and Go, as well as libraries for these languages (libstdc++,...). GCC was originally written as the compiler for the GNU operating system. The GNU system was developed to be 100% free software, free in the sense that it respects the user's freedom.

We strive to provide regular, high quality releases, which we want to work well on a variety of native and cross targets (including GNU/Linux), and encourage everyone to contribute changes or help testing GCC. Our sources are readily and freely available via SVN and weekly snapshots.

https://baike.baidu.com/item/头文件/10978258?fr=aladdin

gcc所遵循的部分约定规则:
.c为后缀的文件,C语言源代码文件;
.a为后缀的文件,是由目标文件构成的档案库文件;
.C,.cc或.cxx 为后缀的文件,是C++源代码文件且必须要经过预处理
.h为后缀的文件,是程序所包含的头文件
.i 为后缀的文件,是C源代码文件且不应该对其执行预处理;
.ii为后缀的文件,是C++源代码文件且不应该对其执行预处理;
.m为后缀的文件,是Objective-C源代码文件;
.mm为后缀的文件,是Objective-C++源代码文件;
.o为后缀的文件,是编译后的目标文件
.s为后缀的文件,是汇编语言源代码文件;
.S为后缀的文件,是经过预编译的汇编语言源代码文件。
 
 
 什么样的内容适合放在头文件里?对于具有外部存储类型的标识符,可以在其他任何一个源程序文件中经声明后引用,因此用户完全可以将一些具有外部存储类型的标识符的声明放在一个头文件中。具体地说,头文件中可以包括:用户构造的数据类型(如枚举类型),外部变量,外部函数、常量和内联函数等具有一定通用性或常用的量。而一般性的变量和函数定义不宜放在头文件中。例如:#include<stdio.h>中的头文件stdio.h作用是让链接器通过头文件里的函数声明找到函数实际代码所在的位置即所在的库文件,这样才能使用该函数的实际代码,函数的实际代码的实现过程是先让链接器通过头文件里函数的申明找到函数实际代码所在的位置即所在的库文件,再通过#include语句把链接器所找到的函数实际代码用链接器把函数的实际代码链接到当前文件即所要执行的程序中。当然有些函数的使用不需要提供头文件,但是在ISO/ANSI C已经对有些函数的使用必须提供哪些头文件制定了标准。 
 

传统 C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<assert.h>//设定插入点
 
#include<ctype.h>//字符处理
 
#include<errno.h>//定义错误码
 
#include<float.h>//浮点数处理
 
#include<fstream.h>//文件输入/输出
 
#include<iomanip.h>//参数化输入/输出
 
#include<iostream.h>//数据流输入/输出
 
#include<limits.h>//定义各种数据类型最值常量
 
#include<locale.h>//定义本地化函数
 
#include<math.h>//定义数学函数
 
#include<stdio.h>//定义输入/输出函数
 
#include<stdlib.h>//定义杂项函数及内存分配函数
 
#include<string.h>//字符串处理
 
#include<strstrea.h>//基于数组的输入/输出
 
#include<time.h>//定义关于时间的函数
 
#include<wchar.h>//宽字符处理及输入/输出
 
#include<wctype.h>//宽字符分类

标准 C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include<algorithm>//STL通用算法
 
#include<bitset>//STL位集容器
 
#include<bits/stdc++.h>//编译器GCC 4.8支持的万能头文件,基本包含所有头文件
 
#include<cctype>//C字符处理
 
#include<cerrno>//C的错误报告机制
 
#include<clocale>
 
#include<cmath>//兼容C语言数学库
 
#include<complex>//复数类
 
#include<cstdio>//C语言输入输出工具
 
#include<cstdlib>//C语言通用工具
 
#include<cstring>//C字符串
 
#include<ctime>
 
#include<deque>//STL双端队列容器
 
#include<exception>//异常处理类
 
#include<fstream>//文件输入输出流
 
#include<functional>//STL定义运算函数(代替运算符)
 
#include<limits>
 
#include<list>//STL线性列表容器
 
#include<map>//STL映射容器
 
#include<iomanip>
 
#include<ios>//基本输入/输出支持
 
#include<iosfwd>//输入/输出系统使用的前置声明
 
#include<iostream>//基本输入输出流
 
#include<queue>//STL队列容器
 
#include<set>//STL集合容器
 
#include<sstream>//基于字符串的流
 
#include<stack>//STL堆栈容器
 
#include<stdexcept>//标准异常类
 
#include<streambuf>//底层输入/输出支持
 
#include<string>//字符串类
 
#include<utility>//STL通用模板类
 
#include<vector>//STL动态数组容器
 
#include<cwchar>
 
#include<cwctype>
在C++中,标准库的命名空间为std,因而包含了上述头文件时,一般会使用下列语句: [2] 
1
using namespace std;

C99 版本

1
2
3
4
5
6
7
8
9
10
11
#include<complex.h>//复数处理
 
#include<fenv.h>//浮点环境
 
#include<inttypes.h>//整数格式转换
 
#include<stdbool.h>//布尔环境
 
#include<stdint.h>//整型环境
 
#include<tgmath.h>//通用类型数学宏
 
一般在一个应用开发体系中,功能的真正逻辑实现是以硬件层为基础,在驱动程序、功能层程序以及用户的应用程序中完成的。头文件的主要作用在于多个代码文件全局变量(函数)的重用、防止定义的冲突,对各个被调用函数给出一个描述,其本身不需要包含程序的逻辑实现代码,它只起描述性作用,用户程序只需要按照头文件中的接口声明来调用相关函数或变量,链接器会从库中寻找相应的实际定义代码。(eg.C++编译模式 [1]  )
从以上结构图来看,头文件是用户应用程序和函数库之间的桥梁和纽带。在整个软件中,头文件不是最重要的部分,但它是C语言家族中不可缺少的组成部分。编译时,编译器通过头文件找到对应的函数库,进而把已引用函数的实际内容导出来代替原有函数。进而在硬件层面实现功能。
C++/C程序的头文件以“.h”为后缀。以下是假设名称为graphics.h的头文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef GRAPHICS_H//作用:防止graphics.h被重复引用
#define GRAPHICS_H
#include<....>//引用标准库的头文件
...
#include"..."//引用非标准库的头文件
...
void Function1(...);//全局函数声明
...
inline();//inline函数的定义
...
classBox//作用:类结构声明
{
...
};
#endif
从以上例子可以看出,头文件一般由四部分内容组成:(1)头文件开头处的版权和版本声明;(2)预处理块;(3)inline函数的定义;(4)函数和类结构声明等。在头文件中,用 ifndef/define/endif结构产生预处理块,用 #include 格式来引用库的头文件。头文件的这种结构,是利用C语言进行开发软件所通常具备的,属于公有知识。
 
 
 
https://github.com/nginx/nginx/blob/master/src/stream/ngx_stream_upstream.h
 
https://github.com/nginx/nginx/blob/master/src/stream/ngx_stream_upstream.c
 
 
 
 
 
 

gcc 头文件是用户应用程序和函数库之间的桥梁和纽带 功能的真正逻辑实现是以硬件层为基础的更多相关文章

  1. linux gcc头文件搜索路径

    #include <>: 直接到系统指定的某些目录中去找某些头文件.#include "": 先到源文件所在文件夹去找,然后再到系统指定的某些目录中去找某些头文件 1. ...

  2. gcc 头文件依赖关系 分析工具

    http://gernotklingler.com/blog/open-source-tools-examine-and-adjust-include-dependencies/

  3. 用户空间程序的函数跟踪器 (Function Tracer)

    http://blog.csdn.net/robertsong2004/article/details/38499995

  4. windows.h头文件中改变光标位置的函数——SetConsoleCursorPosition

    COORD 具体为 typedef struct COORD{ short X; short Y; } COORD,*PCOORD;     可以用来记录坐标. #include <iostre ...

  5. WCF 服务应用程序与 服务库之间的区别

    简单理解, WCF服务库,可以认为是一个包含WCF服务以及契约定义的类库.这儿库还不能直接运行,你可以在其他项目里引用,在宿主里启用托管这个库. 而WCF应用程序,是一个可以执行的程序,它有独立的进程 ...

  6. C语言中的头文件

    1.头文件#include <> :表示引用标准库头文件,编译器会从系统配置的库环境中去寻找 2.头文件#include "":一般表示用户自己定义使用的头文件,编译器 ...

  7. linux 内核头文件 linux kernel header

    概述:在进行有关系统软件的安装的时候(编译一个新的驱动,或者安装一个系统级别的测试工具,例如systemtap),经常需要重新编译内核,相应的问题往往与内核头文件有关.那么,什么是内核头文件,为什么需 ...

  8. c语言_头文件_windows.h

    概述 Win32程序的开头都可看到: #include <windows.h> WINDOWS.H是一个最重要的头文件,它包含了其他Windows头文件,这些头文件的某些也包含了其他头文件 ...

  9. 【C语言入门教程】5.6 函数库和文件

    函数库是为代码复用建立的,将同一类型,需要在不同的程序里使用的函数放置在一起,就组成了一个函数库.如 C 语言的标准库,它集合了开发者常用的函数.开发者自行编写的函数也可以组成函数库,通常称之为自定义 ...

随机推荐

  1. 【Luogu】P1005矩阵取数游戏(高精度+DP)

    题目链接 yeah终于过辣! DP,f[i][j]表示每行还剩i到j这个区间的数没取的时候的值.借这个题我也把高精度的短板弥补了一下,以后高精加高精乘应该是没问题了. 哇终于不怂高精了…… 放上代码. ...

  2. BZOJ 4823 [Cqoi2017]老C的方块 ——网络流

    lrd的题解:http://www.cnblogs.com/liu-runda/p/6695139.html 我还是太菜了.以后遇到这种题目应该分析分析性质的. 网络流复杂度真是$O(玄学)$ #in ...

  3. BZOJ 3282 Tree ——Link-Cut Tree

    [题目分析] 明显的LCT维护连通性的题目. access的操作是比较巧妙的,可以把结点到根变成偏爱路径,而且保证了该点是链上深度最深的点. 而且需边的思想也很巧妙,保证了复杂度. 但是只能用于修改路 ...

  4. [luoguP1415] 拆分数列(DP)

    传送门 t(i,j)表示下标从i到j的数 d[i]表示以i结尾的最小的数的下标 d[i]=max(j) (1<=j<=i && t(d[j-1],j-1)<t(j,i ...

  5. 刷题总结——疫情控制(NOIP2012提高组)

    题目: 题目背景 NOIP2012 提高组 DAY2 试题. 题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点. H 国的首都 ...

  6. VB6 post图片

    在VBA中怎样用XMLhttp 模拟http上传二进制文件? https://www.zhihu.com/question/40974557 作者:付杨 链接:https://www.zhihu.co ...

  7. 【loj6029】「雅礼集训 2017 Day1」市场

    题目 题意:四种操作,区间加法.区间除法(下取整).区间求最小值.区间求和. 第1.3.4个操作都是摆设,关键在于如何做区间除法. 很明显不能直接把区间的和做除法后向下取整,因为区间和可能会多凑出一个 ...

  8. POJ 3585 Accumulation Degree

    二次扫描与换根法 用于解决无根树,对于每一个节点作为根时都要统计 做法: 1.先以任意一个节点为根,做树形DP,保存每个节点的DP值 2.然后自上而下dfs,对于每个节点考虑以他为根的最大值 #inc ...

  9. iOS开发中16进制颜色(html颜色值)字符串转为UIColor

    //16进制颜色(html颜色值)字符串转为UIColor +(UIColor *) hexStringToColor: (NSString *) stringToConvert { NSString ...

  10. Day 2 操作系统基础

    课前复习新知识 RAID(Redundant Arrays of Independent Disks)独立冗余磁盘阵列 定义:加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵 ...