《C语言编程魔法书 基于C11标准》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:陈轶著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2017
  • ISBN:9787111565215
  • 页数:504 页
图书介绍:主要讲解C11标准的语法内容,并且从整个编译、连接到加载过程都会涉及。同时在最后会分别介绍GCC编译器与Clang编译器的C语言语法扩展。通过阅读本书,读者能够完全掌握最新标准的C语言编程。并且对C语言设计思想、实现方式也能有个大概的了解。

第一篇 预备知识篇 2

第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

第二篇 基础语法篇 54

第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 longlong类型 71

5.1.5 布尔类型 72

5.1.6 字符类型 73

5.1.7 宽字符以及Unicode字符类型 77

5.1.8 size t与ptrdifft类型 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 条件特征宏 245

10.2.4 主流编译器及平台预定义的宏 246

10.3 条件预编译 247

10.4 源文件包含预处理指示符 251

10.5 #error预处理指示符 256

10.6 #line预处理指示符 256

10.7 #undef预处理指示符 257

10.8 pragma预编译指示符与操作符 258

10.9 空指示符与C语言中的程序注释 260

10.10 本章小结 262

第11章 C语言程序的编译上下文 263

11.1 C语言程序中的作用域和名字空间 263

11.1.1 文件作用域 264

11.1.2 函数作用域 265

11.1.3 函数原型作用域 266

11.1.4 语句块作用域 267

11.1.5 标识符的重定义与作用域的叠交 269

11.1.6 标识符的名字空间 272

11.2 全局对象与函数 275

11.3 静态对象与函数 277

11.4 局部对象 280

11.5 对象的存储与生命周期 282

11.6 _Thread_local对象 285

11.7 本章小结 286

第三篇 高级语法篇 290

第12章 C语言中的类型限定符 290

12.1 const限定符 290

12.1.1 const限定符修饰普通对象 291

12.1.2 const限定符修饰数组元素 293

12.1.3 const限定符修饰指针类型对象 294

12.1.4 const限定符修饰函数形参类型为数组的对象 299

12.1.5 类型限定符的本质含义 301

12.2 volatile限定符 302

12.3 restrict限定符 304

12.4 Atomic限定符 307

12.5 本章小结 314

第13章 C语言的类型系统 316

13.1 对象类型与函数类型 316

13.2 对声明符的进一步说明 318

13.3 更复杂的声明 322

13.3.1 将某一类型转换为指向该类型的指针 322

13.3.2 判定当前类型属于哪种对象类型 322

13.3.3 复杂复合类型的判断 324

13.4 typedef类型定义 327

13.4.1 typedef的一般使用 327

13.4.2 typedef与类型限定符相结合的使用 330

13.4.3 用typedef来定义结构体与联合体的类型 332

13.5 本章小结 335

第14章 C1 1标准中的表达式、左值与求值顺序 336

14.1 常量表达式 338

14.2 泛型选择表达式 340

14.3 静态断言 343

14.4 C语言中的左值 344

14.5 C语言中表达式的求值顺序 348

14.6 C语言中的语句 352

14.7 本章小结 355

第15章 函数调用约定与ABI 356

15.1 Windows操作系统环境下x86处理器的函数调用约定 357

15.1.1 Windows操作系统下32位x86执行模式的函数调用约定 357

15.1.2 Windows操作系统下64位x86执行模式的函数调用约定 363

15.2 U nix/Linux操作系统环境下x86处理器的函数调用约定 368

15.3 ARM处理器环境下的函数调用约定 370

15.3.1 AArch32架构环境下的函数调用约定 370

15.3.2 AArch64架构环境下的函数调用约定 373

15.4 本章小结 375

第16章 创建静态库与动态库 376

16.1 Widows系统下创建静态库与动态库 377

16.1.1 Windows系统下创建并使用静态库 377

16.1.2 Windows系统上创建并使用动态库 379

16.2 macOS系统下创建静态库与动态库 382

16.2.1 macOS系统下创建并使用静态库 383

16.2.2 macOS系统下创建并使用动态库 386

16.3 Linux系统下创建并使用静态库与动态库 390

16.3.1 Linux系统下创建并使用静态库文件 390

16.3.2 Linux系统下创建并使用动态库 391

16.4 本章小结 393

第四篇 语法扩展篇 396

第17章 GCC对C11标准的语法扩展 396

17.1 在表达式中使用复合语句与声明 397

17.2 声明语句块作用域的跳转标签 398

17.3 跳转标签作为值 401

17.4 嵌套函数 402

17.5 使用typeof来获取对象类型 405

17.6 使用_autotype做类型自动推导 409

17.7 对复数操作的扩展 411

17.8 半精度浮点类型 412

17.9 长度为零的数组 413

17.10 对可变参数个数的宏的语法扩展 415

17.11 case语句中使用范围表达式 417

17.12 投射到一个联合体类型 418

17.13 使用二进制整数字面量 419

17.14 使用_attribute_指定函数、对象与类型的属性 420

17.14.1 _attribute_用于修饰函数的属性 422

17.14.2 _attribute_用于修饰对象的属性 440

17.14.3 _attribute_用于修饰类型的属性 443

17.15 本章小结 444

第18章 Clang编译器对C11标准的扩展 445

18.1 特征检查宏 446

18.2 _Nullable与_Nonnull 446

18.3 函数重载 448

18.4 Blocks语法 449

18.5 本章小结 462

第19章 对C语言的未来展望 463

19.1 C语言中的属性 465

19.2 fallthrough属性 466

19.3 数组片段 467

19.3.1 数组片段的赋值操作 468

19.3.2 数组片段的算术计算操作 470

19.3.3 数组片段用于函数调用的情况 471

19.4 其他语法特性 472

19.5 本章小结 472

第五篇 项目实践篇 474

第20章 制作UTF-8与UTF-16编码字符串的转码器 474

20.1 UTF-8字符编码格式 474

20.2 UTF-16字符编码格式 476

20.3 代码示例 478

20.4 本章小结 487

第21章 制作控制台计算器 488

21.1 对数字的解析 489

21.2 对操作符的优先级处理 489

21.3 代码示例 491

21.4 本章小结 504