C语言编程魔法书pdf是关于C语言编程的书籍,主要讲述了学习C语言的预备知识,C语言编程的环境搭建,C语言中的基本元素,基本数据类型,C语言的控制流语句等等内容。
C语言编程魔法书内容主要讲解C11标准的语法内容,并且从整个编译、连接到加载过程都会涉及。同时在后会分别介绍GCC编译器与Clang编译器的C语言语法扩展。通过阅读本书,读者能够完全掌握新标准的C语言编程。并且对C语言设计思想、实现方式也能有个大概的了解。
书籍作者介绍陈轶,网名zenny_chen,C语言与汇编语言重度用户与拥趸者,安沃传媒移动客户端及HTML5技术研发总监、首席科学家。多年高性能计算、嵌八式系统与移动互联网实践经验,深谙实时操作系统内核、设备驱动研发,对多媒体高性能计算编程、移动端开发以及各种处理器架构如数家珍,同时精通计算机底层基础技术与各种编程语言,尤其精通C/C++、Objective—C以及Swift。现任OpenGPU社区“并行计算讨论区”以及“高级计算机体系结构讨论区”两大版块的版主,以及CocoaChina社区的Swift编程语言讨论区与代码例子区的版主。《OpenCL异构并行计算原理、机制与优化实践》作者之一,App Store以及MacApp Store中CPU Dasher的作者,曾任理光上海图像技术有限公司高级体系结构工程师。
pdf在线试读对于当前主流桌面操作系统而言,可使用VisualC++、GCC以及LLVMClang这三大编译器。其中,VisualC++(简称MSVC)只能用于Windows操作系统;其余两个,除了可用于Windows操作系统之外,主要用于Unix/Linux操作系统。像现在很多版本的Linux都默认使用GCC作为C语言编译器。而像FreeBSD、macOS等系统默认使用LLVMClang编译器。由于当前LLVM项目主要在Apple的主推下发展的,所以在macOS中,Clang编译器又被称为AppleLLVM编译器。MSVC编译器主要用于Windows操作系统平台下的应用程序开发,它不开源。用户可以使用VisualStudioCommunity版本来免费使用它,但是如果要把通过VisualStudioCommunity工具生成出来的应用进行商用,那么就得好好阅读一下微软的许可证和说明书了。而使用GCC与Clang编译器构建出来的应用一般没有任何限制,程序员可以将应用程序随意发布和进行商用。不过由于MSVC编译器对C99标准的支持就十分有限,加之它压根不支持任何C11标准,所以本书的代码例子不会针对MSVC进行描述。所幸的是,VisualStudioCommunity2017加入了对Clang编译器的支持,官方称之为——ClangwithMicrosoftCodeGen,当前版本基于的是Clang3.8。也就是说,应用于VisualStudio集成开发环境中的Clang编译器前端可支持Clang编译器的所有语法特性,而后端生成的代码则与MSVC效果一样,包括像long整数类型在64位编译模式下长度仍然为4个字节,所以各位使用的时候也需要注意。为了方便描述,本书后面涉及VisualStudio集成开发环境下的Clang编译器简称为VS-Clang编译器。
而在嵌入式系统方面,可用的C语言编译器就非常丰富了。比如用于Keil公司51系列单片机的KeilC51编译器;当前大红大紫的Arduino板搭载的开发套件,可Clang编译器的所有语法特性,而后端生成的代码则与MSVC效果一样,包括像long整数类型在64位编译模式下长度仍然为4个字节,所以各位使用的时候也需要注意。为了方便描述,本书后面涉及VisualStudio集成开发环境下的Clang编译器简称为VS-Clang编译器。
电子书目录第一篇 预备知识篇
第1章C魔法概览 /2
1.1 例说编程语言 2
1.2 用C语言编程的基本注意事项 6
1.3 主流C语言编译器介绍 8
1.4 关于GNU规范的语法扩展 10
1.5 用C语言构建一个可执行程序的流程 11
1.6 本章小结 12
第2章学习C语言的预备知识 /14
2.1 计算机体系结构简介 14
2.1.1 贮存器 15
2.1.2 存储器 15
2.1.3 寄存器 16
2.1.4 计算单元 16
2.1.5 程序执行流程 16
2.2 整数在计算机中的表示 17
2.2.1 原码表示法 18
2.2.2 补码表示法 19
2.2.3 八进制数与十六进制数 20
2.3 浮点数在计算机中的表示 22
2.4 地址与字节对齐 24
2.5 字符编码 25
2.6 大端与小端 28
2.7 按位逻辑运算 28
2.8 移位操作 30
2.8.1 算术左移与逻辑左移 30
2.8.2 逻辑右移 30
2.8.3 算术右移 31
2.8.4 循环右移 32
2.9 本章小结 32
第3章C语言编程的环境搭建 /33
3.1 Windows操作系统下搭建C语言编程环境 33
3.1.1 安装Visual Studio Community 2017 34
3.1.2 安装MinGW编译器 40
3.1.3 安装LLVM Clang编译器 43
3.2 macOS系统下搭建C语言编程环境 45
3.3 本章小结 51
第二篇 基础语法篇
第4章C语言中的基本元素 /54
4.1 C语言中的字符集 55
4.2 C语言中的token 56
4.2.1 C语言中的标识符 57
4.2.2 C语言中的关键字 58
4.2.3 C语言中的常量与字符串字面量 60
4.2.4 C语言中的标点符号 60
4.3 关于C语言中的“对象” 62
4.4 C语言中的“副作用” 63
4.5 C语言标准库中的printf函数 63
4.6 本章小结 65
第5章基本数据类型 /66
5.1 整数类型 66
5.1.1 int类型 67
5.1.2 short类型 68
5.1.3 long类型 69
5.1.4 long long类型 71
5.1.5 布尔类型 72
5.1.6 字符类型 73
5.1.7 宽字符以及Unicode字符类型 77
5.1.8 size_t与ptrdiff_t类型 81
5.1.9 C语言中的标准整数类型 82
5.2 浮点类型 84
5.3 数据精度与类型转换 86
5.3.1 整数晋升 87
5.3.2 带符号与无符号整数之间的转换 87
5.3.3 浮点数与浮点数的转换以及浮点数与整数之间的转换 90
5.4 C语言基本运算操作符 92
5.4.1 加、减、乘、除与求模运算操作符 92
5.4.2 按位逻辑操作符 93
5.4.3 自增、自减操作符 94
5.4.4 关系操作符、相等性操作符与逻辑操作符 95
5.4.5 移位操作符 96
5.4.6 圆括号操作符 97
5.5 sizeof操作符 98
5.6 投射操作符 99
5.7 本章小结 101
第6章用户自定义类型 /102
6.1 枚举类型 102
6.2 结构体类型 105
6.2.1 结构体概述 105
6.2.2 用结构体创建对象并访问其成员 107
6.2.3 结构体复合字面量 110
6.3 联合体类型 113
6.4 位域 117
6.4.1 位域的一般特性 118
6.4.2 位域成员的存放与布局 120
6.4.3 匿名位域 122
6.4.4 位域使用示例 124
6.5 字节对齐与字节填充 125
6.5.1 _Alignof操作符 125
6.5.2 _Alignas对齐说明符 126
6.5.3 结构体成员的字节对齐与字节填充 129
6.6 复数类型 133
6.7 本章小结 135
第7章C语言的数组与指针 /136
7.1 一维数组 136
7.2 多维数组 141
7.3 变长数组 145
7.4 一级指针与对象地址 147
7.4.1 地址与指针的基本概念 148
7.4.2 访问指针对象所指对象的内容 149
7.4.3 指针对象的其他操作 150
7.5 多级指针 153
7.6 指向用户自定义类型的指针 156
7.7 指针与数组的关系 159
7.8 指向数组的指针 162
7.9 void类型、指向void类型的指针与空指针 165
7.10 字符数组与字符串字面量 167
7.11 完整与不完整类型 170
7.12 灵活的数组成员 171
7.13 本章小结 173
第8章C语言的控制流语句 /174
8.1 逗号表达式 174
8.2 条件表达式 176
8.3 if-else语句 176
8.4 switch-case语句 179
8.5 while与do-while迭代语句 182
8.6 for迭代语句 187
8.7 goto语句 189
8.8 本章小结 192
第9章C语言的函数 /193
9.1 函数的声明与定义 194
9.2 函数调用与实现 196
9.2.1 函数调用的顺序点 197
9.2.2 函数的栈空间 200
9.2.3 函数的参数传递与返回 201
9.2.4 通过形参修改实参的值 204
9.3 数组类型作为函数形参 205
9.4 带有不定参数类型及个数的函数声明与调用 209
9.5 函数的递归调用 212
9.6 内联函数 218
9.7 函数的返回类型与无返回函数 221
9.8 指向函数的指针 223
9.9 C语言中的主函数main 226
9.10 函数与函数调用作为sizeof操作符 228
9.11 本章小结 229
第10章C语言预处理器 /230
10.1 宏定义 231
10.1.1 宏的基本使用 232
10.1.2 宏定义中的#操作符 234
10.1.3 宏定义中的##操作符 236
10.1.4 宏替换 238
10.1.5 可变参数的宏定义 240
10.2 C语言中预定义的宏 243
10.2.1 C语言强制要求的预定义宏 243
10.2.2 环境宏 244
10.2.3 条件特征宏