第一篇 Microsoft C语言 1
第一章 引言 1
目录 1
第二章 C的基本成分 3
2.1 概述 3
2.2 字符集 3
2.2.1 字母和数字 3
2.2.2 空白符 4
2.2.3 标点符号和特殊符号 4
2.2.4 换码串 4
2.2.5 运算符 5
2.3.1 整数常量 6
2.3 常量 6
2.3.2 浮点常量 7
2.3.3 字符常量 8
2.3.4 字符串常量 8
2.4 标识符 9
2.5 关键字 10
2.6 注释 10
2.7 标识单元 11
第三章 程序结构 12
3.1 概述 12
3.2 源程序 12
3.3 源文件 13
3.5 生存期与可见性 14
3.4 程序执行 14
3.6 命名类 16
第四章 说明 18
4.1 概述 18
4.2 类型设定符 18
4.3 说明符 21
4.3.1 指针、数组和函数的说明符 21
4.3.2 复杂说明符 21
4.3.3 带特殊关键字的说明符 23
4.4 变量说明 24
4.4.1 简单变量说明 25
4.4.2 枚举说明 25
4.4.3 结构说明 27
4.4.4 联合说明 29
4.4.5 数组说明 30
4.4.6 指针说明 31
4.5 函数说明 32
4.6 存储类 33
4.6.1 外部变量说明 34
4.6.2 内部变量说明 36
4.6.3 函数的外部说明和内部说明 37
4.7 初始化 37
4.7.1 基本型和指针型 38
4.7.2 构造型 38
4.7.3 字符串初值符 40
4.8 类型说明 41
4.8.1 结构、联合和枚举的类型说明 42
4.9 类型名 44
第五章 表达式与赋值 44
5.1 概述 44
5.2 操作数 44
5.2.1 常量 44
5.2.2 标识符 44
4.8.2 typedef说明 44
5.2.3 字符串 45
5.2.4 函数调用 45
5.2.5 下标表达式 45
5.2.6 成员选择表达式 47
5.2.9 类型强制转换表达式 48
5.2.7 带运算符的表达式 48
5.2.8 括号中的表达式 48
5.2.10 常量表达式 49
5.3 运算符 49
5.3.1 一般算术转换 49
5.3.2 取反运算符 50
5.3.3 间址和取址运算符 51
5.3.4 sizeof运算符 51
5.3.5 乘除运算符 52
5.3.6 加减运算符 52
5.3.7 移位运算符 53
5.3.8 关系运算符 54
5.3.10 逻辑运算符 55
5.3.9 按位运算符 55
5.3.11 顺序求值运算符 56
5.3.12 条件运算符 57
5.4 赋值运算符 57
5.4.1 左值表达式 58
5.4.2 单目增量与单目减量 58
5.4.3 简单赋值 59
5.4.4 复合赋值 59
5.5 优先级与求值顺序 59
5.6 副作用 61
5.7 类型转换 62
5.7.1 赋值转换 62
4.6.4 公用符号列表 64
5.7.3 运算符的转换 65
5.7.4 函数调用的转换 65
5.7.2 类型强制转换 65
第六章 语句 66
6.1 概述 66
6.2 break语句 66
6.3 复合语句 67
6.4 continue语句 68
6.5 do语句 68
6.6 表达式语句 69
6.7 for语句 69
6.8 goto语句和标号语句 70
6.9 if语句 71
6.10 空语句 72
6.11 return语句 72
6.12 switch语句 73
6.13 while语句 76
7.2.1 存储类 77
第七章 函数 77
7.2 函数定义 77
7.1 概述 77
7.2.2 返回类型 78
7.2.3 形式参数 79
7.2.4 函数体 81
7.3 函数说明 82
7.4 函数调用 83
7.4.1 实际参数 85
7.4.2 参数数目可变的函数调用 86
7.4.3 递归调用 87
第八章 预处理程序伪指令与编译指令 88
8.2 明意常量与宏 88
8.1 概述 88
8.2.1 #define伪指令 89
8.2.2 #undef伪指令 90
8.3 包含文件 91
8.4 条件编译 92
8.4.1 #if、#elif、#else和#endif伪指令 92
8.4.2 #ifdef和#ifndef伪指令 95
8.5 行控制 95
8.6 编译指令 96
附录A 语言差别 97
B.1.2 标识符 99
B.1 标识单元 99
附录B 语法小结 99
B.1.1 关键字 99
B.1.3 常量 100
B.1.4 字符串 102
B.1.5 运算符 102
B.1.6 分隔符 102
B.2 表达式 102
B.3 说明 104
B.4 语句 107
B.6 预处理程序伪指令 108
B.5 定义 108
B.7 编译指令 109
第一章 引言 110
第二篇 Microsoft C编译器 110
第二章 初始步骤 111
2.1 概述 111
2.2 磁盘备份 111
2.3 磁盘目录 111
2.4 硬盘设置步骤 114
2.5 软盘设置步骤 116
2.6 环境设置 120
2.7 CONSYS文件的设置 121
2.8 文件的组织 122
2.9 实例操作 122
2.10 批文件的使用 125
第三章 编译 127
3.1 概述 127
3.2 编译器的运行 127
3.2.1 文件名约定 128
3.2.2 专用文件名 128
3.2.3 源文件名提示 129
3.2.4 目标文件名提示 129
3.2.5 源列表提示 129
3.2.6 目标列表提示 129
3.2.9 命令行方式 130
3.2.8 更换磁盘 130
3.2.7 选择缺省回答 130
3.2.10 选项 132
3.3 编译器选项列表 133
3.4 目标文件的命名 133
3.5 列表文件的生成 134
3.6 预处理程序的控制 139
3.6.1 常量和宏的定义 140
3.6.2 预定义的标识符 141
3.6.3 预定义标识符的定义撤消 141
3.6.4 预处理列表的生成 141
3.6.5 保留注释 142
3.6.6 包含文件的搜索 142
3.7.2 产生函数说明 143
3.7 语法检查 143
3.7.1 标识语法错误 143
3.8 浮点选项的选择 144
3.8.1 有协处理器的情形 145
3.8.2 无协处理器的情形 146
3.8.3 非IBM兼容机的情形 146
3.8.4 浮点选项的兼容性 147
3.9 80186、80188或80286处理器的使用 147
3.10 错误信息概述 148
3.10.1 C编译器的信息 149
3.10.2 警告级别的设置 150
3.11 调试准备 151
3.12 优化 151
3.13 大型程序的编译 152
4.1 概述 154
4.2 连接程序的运行 154
4.2.1 文件名约定 154
第四章 连接 154
4.2.2 目标模块提示 155
4.2.3 运行文件提示 155
4.2.4 列表文件提示 155
4.2.5 库文件提示 156
4.2.6 分隔输入项 156
4.2.9 命令行方式 157
4.2.8 终止连接过程 157
4.2.7 选择缺省回答 157
4.2.10 响应文件方式 158
4.2.11 临时文件 159
4.3 C程序文件的连接 159
4.3.1 main函数 159
4.3.2 缺省库与库的搜索路径 159
4.3.3 改变缺省库 160
4.3.4 避免使用的选项 160
4.4 列表文件的格式 160
4.5 复盖 161
4.5.1 复盖的限制 162
4.5.2 复盖管理程序的提示 162
4.6.2暂停连接过程 163
4.6.1 显示选项清单 163
4.6 连接程序的选项 163
4.6.3 压缩可执行文件 164
4.6.5 使映像文件包含行号 165
4.6.6 ?准备 165
4.6.7 字母大小写的敏感性 165
4.6.8 忽略缺省库 166
4.6.9 控制堆栈大小 166
4.6.10 设置最大分配空间 167
4.6.11 控制段数 167
4.6.12 设置复盖中断号 167
4.6.15 运行文件的装入控制 168
4.6.13 段序排列 168
4.6.14 数据的装入控制 168
4.6.16 保持兼容性 169
4.7 连接程序的执行步骤 169
4.7.1 段的定位 169
4.7.2 帧地址 170
4.7.3 段的顺序 170
4.7.4 段的组合 170
4.7.5 组 171
4.7.6 装配 171
5.1 概述 173
5.2 命令行参数传送 173
第五章 运行 173
5.2.1 通配参数的扩展 174
5.2.2 取消命令行处理 175
5.3 出口码的回送 176
5.4 取消空指针检查 176
第六章 库管理 178
6.1 概述 178
6.2 LIB操作概述 178
6.3 LIB的运行 179
6.3.1 库文件名提示 179
6.3.2 库操作提示 180
6.3.3 列表文件提示 180
6.3.5 命令行方式 181
6.3.4 输出库文件提示 181
6.3.6 响应文件方式 182
6.3.7 续行 182
6.3.8 终止库处理过程 183
6.3.9 选择缺省回答 183
6.4 LIB的功能 183
6.4.1 建立库文件 183
6.4.2 修改库文件 183
6.4.8 合并库 184
6.4.7 移出库模块 184
6.4.6 复制库模块 184
6.4.5 替换库模块 184
6.4.4 删除库模块 184
6.4.3 增加库模块 184
6.4.9 生成相互对照表 185
6.4.10 一致性检查 185
6.4.11 设置页面尺寸 185
第七章 程序维护 186
7.1 概述 186
7.2 MAKE的使用 186
7.2.1 MAKE说明文件 186
7.2.2 MAKE的调用 187
7.2.3 MAKE的选项 188
7.2.4 宏定义 188
7.2.6 特殊的宏定义 189
7.2.5 宏定义的嵌套 189
7.2.7 推导规则 190
7.3 程序维护的例子 191
第八章 内存模式 193
8.1 概述 193
8.2 标准内存模式 194
8.2.1 小型模式程序 194
8.2.2 中型模式程序 195
8.2.3 紧凑模式程序 195
8.2.4 大型模式程序 196
8.2.5 巨型模式程序 196
8.3 关键字near、far和huge 196
8.3.1 near、far和huge的库支持 197
8.3.2 用near、far和huge说明数据 198
8.3.3 用near和far说明函数 199
8.3.4 指针转换 200
8.4 专用内存模式 202
8.4.1 代码指针 202
8.4.2 数据指针 203
8.4.3 段的设置 203
8.4.4 库的支持 204
第九章 高级功能 205
9.1 概述 205
9.2 取消特殊关键字 205
9.3 压缩结构的存储 205
9.6 取消选择缺省库 206
9.5 标记目标文件 206
9.4 限制外部名字的长度 206
9.7 改变char类型的缺省设定 207
9.8 控制栈和堆的分配 207
9.9 控制浮点运算 208
9.9.1 在连接时改换库 208
9.9.2 使用NO87环境变量 209
9.10 高级优化 209
9.10.1 取消堆栈检查 210
9.10.2 最大优化 211
9.11 控制函数调用顺序 211
9.12 控制二进制和文本方式 212
9.14 模块和段的命名 213
9.13 设置数据阈值 213
9.15 窗口软件的编译 214
第十章 语言接口 215
10.1 概述 215
10.2 汇编语言接口 215
10.2.1 分段模式 215
10.2.2 C调用顺序 218
10.2.3 Pascal/FORTRAN调用顺序 220
10.2.4 汇编例行程序入口 220
10.2.5 返回值 221
10.2.6 汇编例行程序出口 221
10.2.9 程序例子 222
10.2.8 寄存器考虑 222
10.2.7 命名约定 222
10.3 混合语言程序设计 225
10.3.1 内存模式 226
10.3.2 选择调用约定 226
10.3.3 命名约定 229
10.3.4 FORTRAN到Pascal或C的接口 230
10.3.5 FORTRAN调用Pascal或C的过程 231
10.3.6 Pascal到FORTRAN或C的接口 232
10.3.7 Pascal调用FORTRAN或C的过程 232
10.3.8 C到FORTRAN或Pascal的接口 233
10.3.9 C调用FORTRAN或Pascal的过程 233
10.3.10 数据类型 233
10.3.11 返回值 245
10.3.12 共享数据 246
10.3.13 输入和输出 247
10.3.14 编译和连接 247
10.3.15 错误信息 247
附录A ASCII字符集 248
附录B 命令小结 250
B.1 概述 250
B.2 编译器小结 250
B.3 LINK小结 253
B.4 LIB小结 255
B.5 MAKE小结 255
B.8 SETENV小结 257
B.7 EXEMOD小结 257
B.6 EXEPACK小结 257
附录C CL命令 259
C.1 概述 259
C.2 命令格式和选项 259
C.3 CL命令的连接 261
C.4 附加的选项 (Ⅱ 262
C.5 与XENIX兼容的选项 262
附录D EXEPACK、EXEMOD和SETENV 264
D.1 引言 264
D.2 EXEPACK实用程序 264
D.3 EXEMOD实用程序 265
D.4 SETENV实用程序 266
G.3.2 致命错误信息 266
E.3 MS—DOS批文件与出口码 268
E.1 概述 268
E.2 MAKE与出口码 268
附录E 出口码 268
E.4 C编译器软件包程序的出口码 269
E.4.1 编译器出口码 269
E.4.2 LINK出口码 269
E.4.3 Code View出口码 269
E.4.4 LIB出口码 269
E.4.5 MAKE出口码 270
E.4.6 EXEPACK出口码 270
E.4.7 EXEMOD出口码 270
E.4.8 SETENV出口码 270
F.2 程序的可移植性 271
附录F 可移植程序 271
F.1 概述 271
F.3 机器硬件的差别 272
F.4 编译器的差别 275
F.5 环境的差别 278
F.6 数据的可移植性 278
F.7 字节顺序一览 278
附录G 错误信息 279
G.1 概述 279
G.2 运行时错误信息 279
G.2.1 运行库错误信息 279
G.2.2 浮点异常 280
G.2.3 运行限制 281
G.3 编译器错误信息 282
G.3.1 警告错误信息 283
G.3.3 编译错误信息 289
G.3.4 命令行错误信息 297
G.3.5 编译器限制 299
G.4 LINK错误信息 299
G.5 LIB错误信息 303
G.6 MAKE错误信息 305
G.7 EXEPACK错误信息 306
G.8 EXEMOD错误信息 306
G.9 SETENV错误信息 307