c语言/c++头文件详解【头文件有什么用】

头文件是C和C++编程中的一种特殊文件,包含函数和变量声明、宏定义等信息,用于代码重用和模块化。#include指令用于将头文件插入源代码,便于使用其中的定义。常见的头文件如stdio.h提供输入输出函数,stdlib.h管理内存,math.h支持数学运算等。
摘要由CSDN通过智能技术生成

前言


在学C语言时,写代码第一句就是

#include<stdio.h>

这句话到底是什么,为什么要写,开始学习C语言的时候也是照着写就完了,下面我用文字描述来让大家对头文件有初步的认识。


一、头文件是什么?

在C和C++编程中,头文件是一种特殊的文件,通常包含函数和变量的声明、宏定义、类型定义、全局变量声明等信息。头文件的作用是为了方便管理和重用代码,它可以被多个源文件共享,从而实现代码的重用和模块化。

头文件通常使用扩展名为.h(C语言)或.hpp(C++语言),并通过#include指令将其包含在源文件中。在编译时,编译器会将头文件中的声明与其他源文件中的定义进行链接,从而生成可执行程序。

因此,头文件是C和C++编程中非常重要的一部分,使用好头文件可以提高程序的开发效率和代码质量。

1.#include指令

在C和C++中,#include是一个预处理指令,用于将指定的头文件包含在源文件中,以便在程序中使用头文件中定义的函数、变量和类型等。该指令的语法格式为:

#include <头文件名>
#include "头文件名"

其中,尖括号(<>)表示系统提供的头文件,编译器将从系统默认的路径中查找该文件;而双引号("")表示用户自定义的头文件,编译器将从当前源文件所在目录开始查找该文件。

在编写程序时,我们通常会在源文件的开头使用#include指令来包含所需的头文件,从而可以直接使用头文件中定义的函数、变量和类型等,避免了重复编写代码的工作,提高了代码的可维护性和复用性。

二、头文件里有什么

在C和C++编程中,头文件通常包含以下内容:

  1. 函数和变量的声明:头文件通常包含函数和变量的声明,以便在编译时可以让编译器知道它们的存在和类型。这些函数和变量的定义通常在其他源文件中,编译器会将它们与头文件中的声明进行链接。

  2. 宏定义:头文件可能包含一些宏定义,这些宏可以用于简化代码,提高代码可读性和可维护性。

  3. 类型定义:头文件可能包含自定义的数据类型定义,这些类型可以在整个程序中使用。

  4. 内联函数定义:头文件可能包含内联函数的定义,这些函数通常在头文件中定义,因为它们需要在编译时进行展开。

  5. 模板定义:头文件可能包含模板的定义,这些模板可以用于实现泛型编程。

  6. 全局变量声明:头文件可能包含全局变量的声明,以便在其他源文件中使用。

总之,头文件是一种重要的编程工具,可以帮助开发者组织代码,提高代码的可读性、可维护性和重用性。

三、常用的头文件

常用的头文件及其主要函数如下:

  1. stdio.h:提供标准输入输出函数,如printf、scanf、puts、gets等。(因为头文件有printf和scanf函数,如果不写头文件连输入和输出都做不到)。

  2. stdlib.h:提供内存管理函数,如malloc、calloc、realloc、free等。

  3. string.h:提供字符串处理函数,如strcpy、strcat、strlen、strcmp等。

  4. math.h:提供数学计算函数,如sin、cos、sqrt、pow等。

  5. time.h:提供时间和日期函数,如time、localtime、strftime等。

  6. ctype.h:提供字符处理函数,如isalnum、isalpha、isdigit、toupper、tolower等。

  7. assert.h:提供断言宏定义,如assert。

  8. stdbool.h:提供布尔类型和常量,如bool、true、false。

  9. limits.h:提供基本数据类型的最大值和最小值常量,如INT_MAX、INT_MIN、CHAR_MAX、CHAR_MIN等。

  10. errno.h:提供错误代码常量和函数,如errno、perror、strerror等


C、传统 C++ #include     //设定插入点 #include      //字符处理 #include      //定义错误码 #include      //浮点数处理 #include     //文件输入/输出 #include     //参数化输入/输出 #include    //数据流输入/输出 #include     //定义各种数据类型最值常量 #include     //定义本地化函数 #include      //定义数学函数 #include      //定义输入/输出函数 #include     //定义杂项函数及内存分配函数 #include     //字符串处理 #include    //基于数组的输入/输出 #include      //定义关于时间的函数 #include      //宽字符处理及输入/输出 #include     //宽字符分类 ////////////////////////////////////////////////////////////////////////// 标准 C++ (同上的不再注释) #include     //STL 通用算法 #include      //STL 位集容器 #include #include #include #include #include      //复数类 #include #include #include #include #include       //STL 双端队列容器 #include     //异常处理类 #include #include    //STL 定义运算函数(代替运算符) #include #include       //STL 线性列表容器 #include        //STL 映射容器 #include #include        //基本输入/输出支持 #include      //输入/输出系统使用的前置声明 #include #include      //基本输入流 #include      //基本输出流 #include       //STL 队列容器 #include        //STL 集合容器 #include      //基于字符串的流 #include       //STL 堆栈容器     #include     //标准异常类 #include     //底层输入/输出支持 #include      //字符串类 #include      //STL 通用模板类 #include      //STL 动态数组容器 #include #include using namespace std; ////////////////////////////////////////////////////////////////////////// C99 增加 #include    //复数处理 #include     //浮点环境 #include   //整数格式转换 #include    //布尔环境 #include    //整型环境 #include    //通用类型数学宏 --------------------------------------------------------------------------------------------------------- 补充: 经常在CSDN以及其他之类的技术论坛上问关于C++ 头文件的问题。提出这些问题的往往就是那些刚学C++的新手。当初我是菜鸟的时候也问过类似的问题。 现在来看看下面两个include: #include // 这个就是1998年标准化以后的标准头文件 #include // 这个就是标准化以前的头文件 更本质上的区别就是iostream把标准C++库的组件放在一个名位std的namespace里面。而相对的iostream.h则将这些标准组件放在全局空间里,同时在标准化以后旧有的C标准库也已经经过改造了。 看看下面这两个头文件 // 标准化后经过改造的C的标准库,所有的组件都放在了std中 #include // 标准化以前C++中的C标准库 #include // 在看看这个头文件C标准库下 基于char* 的字符处理函数库 #include // 在标准化以后他变成了这样 #include // 但是很多朋友还看见过这个字符串处理函数库,他包含了新的string class #include 经过了标准委员会如此大规模手术后,在98年以前出品的C++编译器(BC3.0,BC5.0)上能顺利通过编译的源文件,在支持新标准的编译器上可能无法顺利通过编译也就是很正常的事了。 [起因] 在回过头来看看标准程序库,这个程序库涵盖范围相当广大,提过了许许多多好用的功能。正是因为这样标准程序库中class的名称和函数名与第三方提供的程序库中的class名或是函数名发生名字冲突的可能性大大增大。为了避免这个问题的发生,标准委员会决定将标准程序库中每一样东西都放在namespace std中。但是这么做同时有引来了一个新的问题。很多C++程序代码依赖那些已经存在很多年的C++ “准”标准程序库(C++迟迟未标准化才导致这些情况的发生),例如iosteam.h,complex.h等等。 为了解决这个新出现的问题,标准化委员会决定设计一些新的头文件名,给那些穿上std外衣的组件所使用。把C++头文件的.h去掉,于是就有前面出现的iostream,同样C的头文件也做了相同的处理,同时在前面加上了一个字母c,以表示是C的头文件(感觉上有中种族歧视的感觉)。同时标准化委员会声明就有的C++头文件将不再列于被支持的名单之中了,而旧有的C头文件为了满足“对C的兼容性”这个古老契约,仍然将继续存活下去。 但是,那些编译器厂商不可能去推翻他们客户的旧有编译器(也跟本不会去这么做),所以那些旧有的C++头文件仍然苟延残喘的活了下来,并不断的扰乱那些C++新兵的心智。 下面就是现在大多数C++开发工具表示头文件的组织状态: 1. 旧的C++头文件 比如iostream.h,他们虽然被标准化委员会所抛弃,但由于各大厂商为了各自的商业利益仍然将继续存活下去,这些头文件的内容将不处于namespace std中。 2. 新的C++头文件如iostream虽然提供了和旧有头文件相同的功能,但他的内容都并入了namespace std中,从而有效避免了名字污染的问题。 3. 标准C的头文件如stdio.h继续获得支持,这类文件的内容并未放在std中。 4. C函数库的技能也有对应的新式C++版本,起名称类似cstdio,这类头文件的内容也有幸穿上了std的外衣。 其实标准化以后的标准程序库的改动并不只有这些而已,很多的标准化组件都被“tamplate化”。其中就有元老级人物iostream。标准程序库的问题并不是用一篇,两篇文章就可以说清楚的。如果你像进一步的了解C++的标准程序库的话,你可以看看侯先生的《C++标准程序库》。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值