《C语言参考手册 原书第5版》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:(美)哈比森等著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2011
  • ISBN:9787111346845
  • 页数:404 页
图书介绍:本书是C语言的详尽参考手册,分为两部分:第一部分讨论了C语言的所有语言特征,包括词法、预处理机制、声明、类型、表达式、语句以及函数等基本语言特征;第二部分讨论了C语言的标准库,针对它们不同的功能分别进行详细介绍。为了帮助读者解相关概念,本书在讨论C语言及标准库的细节时,提供了许多实例和解释。第一部分的各章还提供了练习题和主要练习的解答,这些练习可帮助读者加深理解C语言的基本功能和特性。本书可以作为高等院校计算机专业C语言课程的教材和参考书,也可供程序开发人员参考。

第一部分 C语言 2

第1章 概述 2

1.1 C语言的演变 2

1.1.1传统C 2

1.1.2标准C(1989) 2

1.1.3标准C(1995) 3

1.1.4标准C(1999) 3

1.1.5标准C++++ 4

1.1.6本书内容 4

1.2应该使用哪种C语言 4

1.3 C编程概述 5

1.4一致性 6

1.5语法约定 7

第2章 词法元素 8

2.1字符集 8

2.1.1执行字符集 9

2.1.2空白字符和行终止符 9

2.1.3字符编码 10

2.1.4三字符组 10

2.1.5多字节字符和宽字符 11

2.2注释 13

2.3标记 14

2.4操作符和分隔符 15

2.5标识符 15

2.6关键字 17

2.7常量 18

2.7.1整数常量 18

2.7.2浮点数常量 22

2.7.3字符常量 23

2.7.4字符串常量 25

2.7.5转义字符 27

2.7.6字符转义码 28

2.7.7数值转义码 29

2.8 C++兼容性 29

2.8.1字符集 30

2.8.2注释 30

2.8.3操作符 30

2.8.4标识符和关键字 30

2.8.5字符常量 30

2.9关于字符集、指令集和编码 30

2.10练习 32

第3章 C预处理器 34

3.1预处理器命令 34

3.2预处理器词法约定 35

3.3定义和替换 36

3.3.1类似对象的宏定义 36

3.3.2定义带参数的宏 37

3.3.3宏表达式的重新扫描 39

3.3.4预定义的宏 40

3.3.5取消宏定义和重新定义宏 42

3.3.6宏展开的优先级错误 42

3.3.7宏参数的副作用 43

3.3.8把标记转换为字符串 43

3.3.9宏展开中的标记合并 44

3.3.10宏的可变参数列表 45

3.3.11其他问题 46

3.4文件包含 46

3.5条件编译 48

3.5.1 #if、#else和#endif命令 48

3.5.2 #elif命令 49

3.5.3 #ifdef和#ifndef命令 50

3.5.4条件命令中的常量表达式 51

3.5.5 defined操作符 52

3.6显式的行号 52

3.7 pragma指令 53

3.7.1标准pragma命令 53

3.7.2标准pragma指令的位置 54

3.7.3_Pragma操作符 54

3.8错误指令 54

3.9 C++兼容性 55

3.10练习 55

第4章 声明 57

4.1声明的组织形式 57

4.2术语 58

4.2.1作用域 58

4.2.2可见性 59

4.2.3前向引用 59

4.2.4名称的重载 60

4.2.5重复声明 61

4.2.6重复可见性 62

4.2.7范围 62

4.2.8初始值 63

4.2.9外部名称 64

4.2.10编译时名称 65

4.3存储类别和函数指定符 65

4.3.1默认存储类别指定符 66

4.3.2存储类别指定符的例子 66

4.3.3函数指定符 67

4.4类型指定符和限定符 67

4.4.1默认类型指定符 68

4.4.2缺失的声明器 69

4.4.3类型限定符 70

4.4.4 const 70

4.4.5 volatile和序列点 72

4.4.6 restrict 74

4.5声明器 75

4.5.1简单声明器 75

4.5.2指针声明器 76

4.5.3数组声明器 77

4.5.4函数声明器 78

4.5.5声明器的组合 80

4.6初始化值 81

4.6.1整数 82

4.6.2浮点数 83

4.6.3指针 83

4.6.4数组 84

4.6.5枚举 86

4.6.6结构 86

4.6.7联合 87

4.6.8省略花括号 88

4.6.9指定成员的初始化值 88

4.7隐式声明 89

4.8外部名称 90

4.8.1初始化值模型 90

4.8.2省略的存储类别模型 90

4.8.3公共模型 90

4.8.4混合公共模型 91

4.8.5总结和建议 91

4.8.6未引用的外部声明 92

4.9 C++兼容性 92

4.9.1作用域 92

4.9.2标签和typedef名称 92

4.9.3用于类型的存储类别指定符 93

4.9.4 const类型限定符 93

4.9.5初始化值 93

4.9.6隐式声明 93

4.9.7定义和引用声明 94

4.9.8函数链接 94

4.9.9无参函数 94

4.10练习 94

第5章 类型 97

5.1整数类型 98

5.1.1有符号整数类型 98

5.1.2无符号整数类型 101

5.1.3字符类型 102

5.1.4扩展整数类型 104

5.1.5布尔类型 104

5.2浮点类型 104

5.3指针类型 108

5.3.1通用指针 109

5.3.2 null指针和非法指针 109

5.3.3使用指针的一些警告 110

5.4数组类型 111

5.4.1数组和指针 111

5.4.2多维数组 112

5.4.3数组边界 112

5.4.4操作 113

5.4.5可变长度的数组 113

5.5枚举类型 115

5.6结构类型 117

5.6.1结构类型引用 119

5.6.2结构上的操作 120

5.6.3成员 120

5.6.4结构成员的布局 122

5.6.5位段 122

5.6.6移植性问题 124

5.6.7结构的大小 125

5.6.8灵活数组成员 126

5.7联合类型 127

5.7.1联合成员的布局 127

5.7.2联合的大小 128

5.7.3使用联合类型 129

5.7.4(其他)使用联合类型 130

5.8函数类型 131

5.9 void类型 133

5.10 typedef名称 133

5.10.1用于函数类型的typedef名称 135

5.10.2重定义typedef名称 135

5.10.3编译器的说明 136

5.11类型兼容性 136

5.11.1等价的类型 136

5.11.2枚举兼容性 137

5.11.3数组兼容性 138

5.11.4函数兼容性 138

5.11.5结构和联合兼容性 139

5.11.6指针兼容性 139

5.11.7源文件之间的兼容性 139

5.12类型名称和抽象声明器 139

5.13 C++兼容性 141

5.13.1枚举类型 141

5.13.2 typedef名称 141

5.13.3类型兼容性 141

5.14练习 141

第6章 转换和表示形式 144

6.1表示形式 144

6.1.1存储单位和数据长度 144

6.1.2字节顺序 145

6.1.3对齐限制 146

6.1.4指针的长度 147

6.1.5地址模型的效果 147

6.1.6类型表示形式 149

6.2转换 150

6.2.1表示形式的变化 150

6.2.2细微的转换 150

6.2.3转换为整数类型 150

6.2.4转换为浮点类型 152

6.2.5转换为结构和联合类型 152

6.2.6转换为枚举类型 152

6.2.7转换为指针类型 152

6.2.8转换为数组和函数类型 153

6.2.9转换为void类型 153

6.3寻常转换 154

6.3.1类型转换 154

6.3.2赋值转换 154

6.3.3寻常单目转换 155

6.3.4寻常双目转换 157

6.3.5默认的函数实参转换 158

6.3.6其他函数转换 159

6.4 C++兼容性 159

6.5练习 159

第7章 表达式 161

7.1对象、左值和指示符 161

7.2表达式和优先级 162

7.2.1操作符的优先级和结合性 162

7.2.2溢出和其他算术异常 163

7.3基本表达式 164

7.3.1名称 164

7.3.2字面值 165

7.3.3带括号的表达式 165

7.4后缀表达式 166

7.4.1下标表达式 166

7.4.2成员选择 168

7.4.3函数调用 169

7.4.4后缀增值和减值操作符 171

7.4.5复合字面值 172

7.5单目表达式 173

7.5.1类型转换 174

7.5.2 sizeof操作符 174

7.5.3单目负号和正号 176

7.5.4逻辑反 176

7.5.5位反 177

7.5.6取地址操作符 177

7.5.7间接访问 178

7.5.8前缀增值和减值操作符 179

7.6双目操作符表达式 180

7.6.1乘除操作符 180

7.6.2加减操作符 182

7.6.3移位操作符 183

7.6.4关系操作符 185

7.6.5相等操作符 186

7.6.6位操作符 188

7.6.7整数集合的例子 189

7.7逻辑操作符表达式 192

7.8条件表达式 194

7.9赋值表达式 195

7.9.1简单赋值 196

7.9.2复合赋值 197

7.10线性表达式 197

7.11常量表达式 198

7.11.1预处理器常量表达式 199

7.11.2整型常量表达式 200

7.11.3初始化值常量表达式 200

7.12求值的顺序 201

7.13被丢弃的值 202

7.14内存访问的优化 203

7.15C++兼容性 204

7.16练习 204

第8章 语句 206

8.1语句的基本语法规则 206

8.2表达式语句 207

8.3标签语句 207

8.4复合语句 208

8.5条件语句 210

8.5.1多路条件语句 210

8.5.2悬疑的else问题 211

8.6迭代式语句 212

8.6.1 while语句 212

8.6.2 do语句 213

8.6.3 for语句 214

8.6.4使用for语句 215

8.6.5多个控制变量 217

8.7 switch语句 218

8.8 break和continue语句 220

8.9 return语句 222

8.10 goto语句 223

8.11空语句 224

8.12 C++兼容性 224

8.12.1复合语句 224

8.12.2循环中的声明 224

8.13练习 225

第9章 函数 226

9.1函数定义 226

9.2函数原型 228

9.2.1原型出现在什么时候 230

9.2.2混合使用原型和非原型声明 230

9.2.3合理地使用原型 231

9.2.4原型和调用约定 231

9.2.5标准C和传统C的兼容性 233

9.3形式参数声明 233

9.4形参类型的调整 235

9.5参数传递约定 236

9.6形参的一致 237

9.7函数的返回类型 238

9.8返回类型的一致 239

9.9 main函数 239

9.10内联函数 240

9.11 C++兼容性 242

9.11.1原型 242

9.11.2形参和返回类型中的类型声明 242

9.11.3返回类型的一致 242

9.11.4 main 242

9.11.5内联 243

9.12练习 243

第二部分 C函数库 246

第10章 函数库简介 246

10.1 标准C工具 246

10.2 C++兼容性 247

10.3库头文件和名称 249

10.3.1 assert.h 249

10.3.2 complex.h 249

10.3.3 ctype.h 249

10.3.4 errno.h 249

10.3.5 fenv.h 249

10.3.6 float.h 250

10.3.7 inttypes.h 250

10.3.8 iso64.h 250

10.3.9 limits.h 250

10.3.10 locale.h 250

10.3.11 math.h 251

10.3.12 setjmp.h 252

10.3.13 signal.h 252

10.3.14 stdarg.h 252

10.3.15 stdbool.h 252

10.3.16 stddef.h 252

10.3.17 stdint.h 252

10.3.18 stdio.h 252

10.3.19 stdlib.h 253

10.3.20 string.h 253

10.3.21 tgmath.h 253

10.3.22 time.h 254

10.3.23 wchar.h 254

10.3.24 wctype.h 254

第11章 标准语言附加 255

11.1 NULL、ptrdiff_t、size_t、offsetof 255

11.2 EDOM、ERANGE、EILSEQ、errno、strerror、perror 256

11.3 bool、false、true 257

11.4 va_list、va_start、va_arg、va_end 258

11.5标准C的操作符宏 261

第12章 字符处理 262

12.1 isalnum、isalpha、iscntrl、iswalnum、iswalpha、iswcntrl 262

12.2 iscsym、iscsymf 264

12.3 isdigit、isodigit、isxdigit、iswdigit、iswxdigit 264

12.4 isgraph、isprint、ispunct、iswgraph、iswprint、iswpunct 265

12.5 islower、isupper、iswlower、iswupper 266

12.6 isblank、isspace、iswhite、iswspace 266

12.7 toascii 267

12.8 toint 267

12.9 tolower、toupper、towlower、towupper 267

12.10 wctype_t、wctype、iswctype 268

12.11 wctrans_t、wctrans 269

第13章 字符串处理 270

13.1 strcat、strncat、wcscat、wcsncat 270

13.2 strcmp、strncmp、wcscmp、wcsncmp 271

13.3 strcpy、strncpy、wcscpy、cscncpy 272

13.4 strlen、wcslen 273

13.5 strchr、strrchr、wcschr、wcsrchr 273

13.6 strspn、strcspn、strpbrk、strrpbrk、wcsspn、wcscspn、wcspbrk 274

13.7 strstr、strtok、wcsstr、wcstok 275

13.8 strtod、strtof、strtold、strtol、strtoll、strtoul、strtoull 276

13.9 atof、atoi、atol、atoll 277

13.10 strcoll、strxfrm、wcscoll、wcsxfrm 277

第14章 内存函数 279

14.1 memchr、wmemchr 279

14.2 memcmp、wmemcmp 279

14.3 memcpy、memccpy、memmove、wmemcpy、wmemmove 280

14.4 memset、wmemset 281

第15章 输入/输出工具 282

15.1 FILE、EOF、wchar_t、WEOF 283

15.2 fopen、fclose、fflush、freopen、fwide 284

15.2.1文件模式 285

15.2.2文件的定向 286

15.3 setbuf、setvbuf 287

15.4 stdin、stdout、stderr 287

15.5 fseek、ftell、rewind、fgetpos、fsetpos 288

15.5.1 fseek和ftell 287

15.5.2 fgetpos和fsetpos 290

15.6 fgetc、fgetwc、getc、getwc、getchar、getwchar、ungetc、ungetwc 290

15.7 fgets、fgetws、gets 291

15.8 fscanf、fwscanf、scanf、wscanf、sscanf、swscanf 292

15.8.1控制字符串 293

15.8.2转换规范 293

15.9 fputc、fputwc、putc、putwc、putchar、putwchar 298

15.10 fputs、fputws、puts 299

15.11 fprintf、printf、sprintf、snprintf、fwprintf、wprintf、swprintf 299

15.11.1输出格式 300

15.11.2转换规范 301

15.11.3转换标志 301

15.11.4最小字段宽度 302

15.11.5精度 303

15.11.6长度规范 303

15.11.7转换操作 304

15.12 v[x]printf、v[x]scanf 311

15.13 fread、fwrite 312

15.14 feof、ferror、clearerr 313

15.15 remove、rename 314

15.16 tmpfile、tmpnam、mktemp 314

第16章 基本工具 316

16.1 malloc、calloc、mlalloc、clalloc、free、cfree 316

16.2 rand、srand、RAND_MAX 318

16.3 atof、atoi、atol、atoll 319

16.4 strtod、strtof、strtold、strtol、strtoll、strtoul、strtoull 319

16.5 abort、atexit、exit、_Exit、EXIT_FAILURE、EXIT_SUCCESS 321

16.6 getenv 322

16.7 system 323

16.8 bsearch、qsort 323

16.9 abs、labs、labs、div、ldiv、lldiv 325

16.10 mblen、mbtowc、wctomb 326

16.10.1编码和转换状态 327

16.10.2长度函数 327

16.10.3转换为宽字符 327

16.10.4宽字符转换为多字节字符 328

16.11 mbstowcs、wcstombs 328

16.11.1转换为宽字符串 328

16.11.2从宽字符串转换为多字节字符 329

第17章 数学函数 331

17.1 abs、lbas、llabs、div、ldiv、lldiv 331

17.2 fabs 332

17.3 ceil、floor、lrint、llrint、lround、llround、nearbyint、round、rint、trunc 332

17.4 fmod、remainder、remquo 333

17.5 frexp、ldexp、modf、scalbn 334

17.6 exp、exp2、expm1、ilogb、log、log10、log1p、log2、logb 334

17.7 cbrt、fma、hypot、pow、sqrt 335

17.8 rand、srand、RAND_MAX 336

17.9 cos、sin、tan、cosh、sinh、tanh 336

17.10 acos、asin、atan、atan2、acosh、asinh、atanh 337

17.11 fdim、fmax、fmin 338

17.12类型通用的宏 338

17.13 erf、erfc、lgamma、tgamma 341

17.14 fpclassify、isfinite、isinf、isnan、isnormal、signbit 342

17.15 copysign、nan、nextafter、nexttoward 343

17.16 isgreater、isgreaterequal、isless、islessequal、islessgreater、isunordered 343

第18章 时间和日期函数 345

18.1 clock、clock_t、CLOCKS_PER_SEC、times 345

18.2 time、time_t 346

18.3 asctime、ctime 346

18.4 gmtime、localtime、mktime 347

18.5 difftime 348

18.6 strtime、wcsftime 349

第19章 控制函数 352

19.1 assert、NDEBUG 352

19.2 system、exec 352

19.3 exit、abort 353

19.4 setjmp、longjmp、jmp_buf 353

19.5 atexit 354

19.6 signal、raise、gsignal、ssignal、psignal 354

19.7 sleep、alarm 356

第20章 区域 357

20.1 setlocale 357

20.2 localeconv 358

第21章扩展整数类型 361

21.1基本规则 361

21.1.1类型的种类 361

21.1.2要么都定义,要么都不定义 361

21.1.3 MIN和MAX限制 361

21.1.4 PRI…和SCN…格式字符串宏 362

21.2固定长度的整数类型 363

21.3具有最小宽度的最小长度类型 364

21.4具有最小宽度的快速类型 364

21.5指针长度和最大长度整数类型 365

21.6 ptrdiff_t、size_t、wchar_t、wint_t和sig_atomic_t的范围 366

21.7 imaxabs、imaxdiv、imaxdiv_t 366

21.8 strtoimax、strtouimax 367

21.9 wcstoimax、wcstoumax 367

第22章 浮点环境 368

22.1介绍 368

22.2浮点环境 369

22.3浮点异常 369

22.4浮点四舍五入模式 370

22.5浮点表达式收缩 371

第23章 复数运算 372

23.1复数函数库约定 372

23.2 complex、_Complex_I、imaginary、_Imaginary_I、I 372

23.3 CX_LIMITED_RANGE 372

23.4 cacos、casin、catan、ccos、csin、ctan 373

23.5 cacosh、casinh、catanh、ccosh、csinh、ctanh 374

23.6 cexp、clog、cabs、cpow、csqrt 374

23.7 carg、cimag、creal、conj、cproj 375

第24章 宽字符和多字节字符工具 377

24.1基本类型和宏 377

24.2宽字符和多字节字符之间的转换 377

24.3宽字符串和多字节字符串之间的转换 379

24.4转换为算术类型 380

24.5输入和输出函数 380

24.6字符串函数 381

24.7日期和时间转换 382

24.8宽字符分类和映射函数 382

附录A ASCII字符集 383

附录B 语法 384

附录C 练习答案 396