一、前言
本系列文章旨在总结 C 语言基础知识,包括 标准库函数、疑难点分析、常用函数封装、常用项目代码块 等。关于C标准示例见 C语言教程 。
二、标准库
常用标准库包含在如下头文件中:
标准库 | 作用 | 标准库 | 作用 |
---|---|---|---|
<assert.h> | 断言假设 | <float.h> | 浮点值相关的依赖于 平台的常量,增强可移植性 |
<math.h> | 各种数学函数 | <stdarg.h> | 可变参数相关 |
<stdlib.h> | 通用工具函数 | <ctype.h> | 检查字符的属性 |
<limits.h> | 各种变量的限制大小 | <setjmp.h> | 承担非局部标号和goto作用 |
<stddef.h> | 定义标准宏以及类型 | <string.h> | 各种操作字符数组的函数 |
<errno.h> | 定义了整数变量 errno | <locale.h> | 定义了特定地域的设置, 比如日期格式和货币符号 |
<signal.h> | 定义了程序执行期间报告的 不同信号的函数和宏 |
<stdio.h> | 定义各种函数来执行输入和输出 |
<time.h> | 定义操作日期和时间的函数 |
三、C语言易错点
3.1、运算符优先级
这里略作提及,最好直接添加括号。
3.2、define定义函数
define 宏定义,常用来定义一些常量和函数,但是由于宏定义的特性,在定义函数时可能会出现一些问题,链接中以宏定义 MAX函数来做说明。
3.3、指针、数组、函数
本节包含指针的示例、地址运算、指针与数组的关系以及 函数指针 等示例,详见链接内容
四、 GNU C编译器扩展语法
4.1、指定初始化
早期标准 C 不支持指定初始化, GCC 编译器就已经支持指定初始化了,因为这个特性也被看做 GCC 编译器的一个特性。包括: 指定初始化数组元素、支持'...'表示范围扩展、指定初始化结构体成员
4.2、语句表达式
所谓语句表达式是指允许在一个表达式中内嵌语句,允许在表达式内部使用局部变量、for循环和goto跳转语句。特别在用于 #define宏定义 中表达复杂的结构,其语句表达式的格式如下
({表达式1; 表达式2; 表达式3;})
4.3、typeof关键字
标准 C 中定义了 sizeof 关键字,用来获取一个变量或数据类型在内存中所占的字节数。GNU C中扩展了关键字 typeof 用于获取一个变量或表达式的类型。
4.4、container_of关键字
此关键字的主要作用是根据结构体某一成员的地址,获取这个结构体的首地址。例如应用场景:当函数传递参数是结构体的成员变量,但同时可能会使用此结构体的其他成员变量,就可以通过此关键词来实现。
4.5、零长数组
零长度数组经常以变长结构体的形式出现,并不单用。在变长结构体中,零长度数组不占用结构体的存储空间。
4.6、属性声明
本章介绍使用 _attribute_ 来声明一些函数、变量或类型的特殊属性,这主要用来指导编译器在编译程序时进行特定方面的优化或代码检查。属性如 section、aligned、packed、format、weak、alias、noinline、always_inline...
网友评论