C 高阶
本专栏将介绍 C 语言在实际工程中常见的高级特性。
☆星轨★
人生苦短,只争朝夕。
展开
-
【C 高阶】系列导航
1. 撰写前言C 语言可谓是现代编程语言之祖,其编程语法被很好地扩展到其衍生语言之中,为面向对象的语言打好根基,时至今日仍被认为是学习编程最佳的入门语言。《C 高阶》系列将专注于 C 语言的高阶用法,其在大型项目如 Linux 内核中被广泛使用。通过学习这些 C 语言的奇技淫巧,能够更好地学习计算机的底层逻辑,以便于进一步学习 Linux 内核程序。让我们一起领略 C 语言的精髓所在吧!2...原创 2019-10-06 19:45:00 · 460 阅读 · 0 评论 -
【C 高阶】可变参数
1. 简介可否想过 C 语言中最常见常用的 printf() 函数是如何做到接收任意类型、任意数量的参数的呢?实际上,printf() 中通过可变参数特性来接收任意类型、任意数量的参数。可变参数通过占位 ... 显式指示,例如以下函数的形参就是可变参数:void fun (...){ // do something}2. 相关 API在函数中怎么使用这些可变参数呢?C 语言在头文件 <stdarg.h> 中提供了三个操作可变参数的 API:va_start、va_arg原创 2020-05-24 11:29:27 · 280 阅读 · 0 评论 -
【C 高阶】解析命令参数方法
C 高阶系列导航1. C 程序的参数在命令行中执行应用软件时,常使用参数来完成对应用的配置或设置。因此,程序中对命令参数进行解析是非常常见且重要的功能。在 C 语言中,当程序需要使用命令参数时,mian 函数必须为以下形式:int main(int argc, char* argv[]){ // ...}参数对应着 main 函数的形参 argc 与 argv。argc ...原创 2020-05-05 11:47:10 · 2275 阅读 · 0 评论 -
【C 高阶】C 的类泛型编程 -- Linux 内核链表
1. 链表简介由于 C 语言为面向过程的语言,标准库中并没有提供数据结构相关的数据类型。因此,当需要在程序使用链表结构时,只能从 0 开始实现一个链表类型,且设计的质量参差不齐。在 Linux 内核中提供了一个通用的链表节点类型 struct list_head,该链表为循环双向结构,并配套了一系列维护链表结构的 API。在程序中,只需在定义结构体时包含一个 struct list_head...原创 2020-05-03 16:31:18 · 302 阅读 · 0 评论 -
【C 高阶】盘点标准 C 库文件操作函数
1. C 库 API 的特点在标准 C 语言库中有提供一套完整的文件操作 API,如 fopen()、fgets()、fread() 等,使用这些 API 可以对指定文件进行读写操作。C 库 API 具备以下特征:高兼容有别于系统调用 API(如 Linux 下的 open()、read()、write() 等),C 库 API 是支持跨平台的。也就是说,无论在 Window、Lin...原创 2019-12-14 21:19:49 · 497 阅读 · 2 评论 -
【C 高阶】彻底理解数组与指针
C 高阶系列导航0. 前言本文将深入浅出地讲述数组与指针之间的共性与关联,适合有一定 C/C++ 功底的同学进阶学习。文中的程序均在 64 位环境下运行,且程序运行的结果会以注释的方式呈现在代码中以便阅读。全文学习约需 15 分钟。1. 数组和指针的本质数组类型和指针类型都是 C 的特殊数据类型,这里的“特殊”是相对于整型、浮点型等基本数据类型来说的。一般地,数组类型变量统称为...原创 2019-12-03 21:10:47 · 753 阅读 · 0 评论 -
【C 高阶】数组和指针笔试题精选
C 高阶系列导航1. 前言在 C/C++ 相关的岗位笔试中,数组和指针相关的知识点为高频考点,能够很好考察应聘者的 C/C++ 功底。因此,本文精选了数组与指针相关的笔试题,并解析解题思路,希望能够加强读者对数组和指针的理解。在阅读本文前,强烈推荐先学习博文《【C 高阶】- 彻底理解数组与指针》,里面详细介绍了数组与指针之间的共性与关联。2. 笔试题精选第一题以下程序输出的结果是?...原创 2019-12-03 21:07:59 · 295 阅读 · 0 评论 -
【C 高阶】函数宏的三种封装方式
C 高阶系列导航1. 函数宏介绍函数宏,即包含多条语句的宏定义,其通常为某一被频繁调用的功能的语句封装,且不想通过函数方式封装来降低额外的弹栈压栈开销。函数宏本质上为宏,可以直接进行定义,例如:#define INT_SWAP(a,b) \ int tmp = a; \ a = b; \ b = tmp但上述的宏具有一个明显的缺点:当遇...原创 2019-11-10 10:19:38 · 1952 阅读 · 0 评论 -
【C 高阶】共用体(联合体)
C 高阶系列导航1. 共用体简介共用体又称联合体,为一种 C 语言的复合数据类型。共用体与结构体类似的是,同为多种数据类型的集合;不同的是,共用体在同一时刻只能表现出其中一种数据类型,而结构体本身包含着多种数据类型。如何理解“共用体在同一时刻只能表现出其中一种数据类型”这一句话呢?可以从数据类型的角度解答。数据类型为对某段内存以特定方式进行解析的方法,比如整型就是对 4 字节大小的内存以...原创 2019-10-29 16:44:34 · 1333 阅读 · 2 评论 -
【C 高阶】枚举
C 高阶系列导航1. 枚举简介枚举是 C 中的一种基本数据类型,常作为数据标识符的集合使用,能够明显地提高程序的可读性与安全性。2. 枚举的定义枚举的定义格式为:enum 枚举名 { 枚举元素 1, 枚举元素 2, ...};如果需要定义枚举变量时,可以使用 typedef 对枚举类型的名称进行简化:typedef enum 枚举名 { 枚...原创 2019-10-07 16:45:12 · 329 阅读 · 1 评论 -
【C 高阶】详解 container_of 宏
1. 简介container_of 宏在 Linux 内核中非常常见,只有涉及到链表结构的几乎都有它的身影,其主要功能是通过结构体变量的任一成员便可得到该结构体变量的首地址。所以知道为什么在链表中很常见吧?因为在链表中使用该宏可以快速地通任一成员定位到成员所属的节点首地址!其源码为:#define container_of(ptr, type, member) ({ \ co...原创 2019-03-13 23:09:00 · 689 阅读 · 2 评论