c 头文件有哪些 C 语言标准库头文件汇总
c 头文件有哪些,C 语言头文件本质是声明文件,里面存放函数声明宏定义类型定义,源文件通过 include 引入头文件,就可以调用对应的标准库功能,标准 C 也就是 C89 C99 C11 都规定了一批标准头文件,写代码不需要自己重复声明库函数,只需要引入对应头文件,编译器才能识别函数原型,避免隐式声明报错,除了标准头文件,项目还可以自定义头文件,用来存放自己写的函数声明结构体宏,下面主要介绍考试和开发最常用的标准库头文件。
常用标准头文件对照表
| 头文件名 | 主要功能 | 常用函数宏 |
|---|---|---|
| stdio.h | 标准输入输出 | printf scanf getchar putchar fopen fclose |
| stdlib.h | 通用工具库 | malloc free atoi rand srand exit system |
| string.h | 字符串处理 | strcpy strcat strlen strcmp memset |
| math.h | 数学运算 | sqrt pow sin cos fabs floor ceil |
| ctype.h | 字符判断转换 | isalpha isdigit toupper tolower |
| time.h | 时间日期 | time localtime clock difftime |
| assert.h | 断言调试 | assert 宏 |
| limits.h | 基础类型极限值 | INT_MAX CHAR_MAX 等宏 |
| float.h | 浮点数精度极限 | FLT_MAX DBL_EPSILON |
| stddef.h | 通用类型定义 | size_t NULL ptrdiff_t |
| stdarg.h | 可变参数 | va_list va_start va_arg va_end |
| errno.h | 错误码 | errno 变量 EINVAL 等错误宏 |
C99 新增常用头文件
| 头文件名 | 主要功能 |
|---|---|
| stdbool.h | 布尔类型 bool true false |
| stdint.h | 定长整数类型 int32_t uint64_t |
| complex.h | 复数运算支持 |
| tgmath.h | 泛型数学宏 |
C11 新增头文件
| 头文件名 | 主要功能 |
|---|---|
| threads.h | 多线程支持 |
| stdatomic.h | 原子操作 |
头文件使用基础写法
引入标准头文件使用尖括号,示例
include
include
自定义项目头文件使用双引号,示例
include "myhead.h"
使用要点
1 调用 math.h 里面数学函数,部分编译器编译的时候需要链接数学库,gcc 编译命令需要加 lm 参数
2 头文件只做声明,函数实现在 libc 库里面,include 不会自动复制函数代码,只是告诉编译器函数原型
3 同一个头文件重复引入会造成重复声明,所以头文件一般会加上头文件保护宏,也就是 ifndef define endif
4 不要随意引入不需要的头文件,会增加编译体积,也可能出现宏命名冲突
自定义头文件简单说明
自定义头文件一般存放结构体 typedef 宏函数声明,配套同名 c 源文件写函数实现,适合多文件工程,比如 student.h 里面声明结构体和打印函数,student.c 写函数实现,main.c 引入 student.h 就可以调用。
掌握这些标准头文件,写基础 C 语言作业和小程序基本够用,做项目再按需引入新增头文件。
【常见问题】
问题 1 c 头文件有哪些,stdio.h 和 stdlib.h 能不能搞混
回答 1 c 头文件有哪些,stdio.h 负责输入输出,stdlib.h 负责内存分配随机数类型转换,两个功能完全不同,调用 malloc 必须引入 stdlib.h,调用 printf 必须引入 stdio.h。
问题 2 c 头文件有哪些,为什么调用 sqrt 报错
回答 2 c 头文件有哪些,调用 sqrt 属于 math.h,首先要确认已经 include math.h,gcc 编译还需要链接数学库,添加 lm 链接参数,否则会出现 undefined reference 报错。
问题 3 c 头文件有哪些,头文件里面可以写函数实现吗
回答 3 c 头文件有哪些,标准做法头文件只写声明,函数实现放在 c 源文件,如果在头文件写普通函数实现,多文件编译的时候会出现重复定义链接错误,只有 inline 函数可以写在头文件。
【免责申明】
本文属于编程技术科普内容,不同编译器扩展头文件存在差异,代码编译请以所用编译器标准为准,本文不承担代码编译异常相关责任。
