《Sun ONE Studio C++程序员手册》PDF下载

  • 购买积分:11 如何计算积分?
  • 作  者:Sun Microsystems,Inc著;高波,林宇译
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2002
  • ISBN:7111110927
  • 页数:292 页
图书介绍:

第1章 C++编译器概述 2

1.1 所遵循的标准 2

1.2 C++Readme文件 2

第一部分 C++编译器 2

1.3 手册页 3

1.4 许可 3

1.5 C++编译器的新特性 3

1.6 C++工具 5

1.7 本地语言的支持 5

第2章 使用C++编译器 6

2.1 开始使用 6

2.2 运行编译器 7

2.2.1 命令语法 7

本书表格 8

表2-1 C++编译器可识别的文件后缀名 8

2.2.2 文件命名惯例 8

2.2.3 使用多个源文件 8

2.3 用不同版本的编译器编译 9

2.4.2 单独的编译和连接 10

2.4.3 一致编译和连接 10

2.4.1 编译连接的顺序 10

2.4 编译和连接 10

2.4.4 SPARC V9的编译 11

2.4.5 诊断编译器 12

2.4.6 理解编译器的组织 12

表2-2 C++编译系统的组件 13

2.5.2 #define所列的可变参数 14

2.5.1 Pragmas 14

2.5 预处理指令和名称 14

2.5.3 预定义的名字 15

2.5.4 #error 15

2.6.1 交换区的大小 15

2.6.2 增大交换区 15

2.6 内存需求 15

2.6.3 控制虚拟内存 16

2.6.4 内存的需求 16

2.7 简化命令 17

2.7.1 在C shell中使用别名 17

2.7.2 使用CCFLAGS来指定编译选项 17

2.7.3 使用make 17

表3-1 选项语法格式的例子 20

第3章 使用C++的编译器选项 20

3.1 语法 20

3.2 通用的法则 20

3.3.1 代码生成选项 21

3.3.2 调试选项 21

3.3 按功能概述选项 21

表3-2 代码生成选项 21

表3-3 调试选项 22

表3-4 浮点选项 22

3.3.3 浮点选项 22

表3-5 语言选项 23

3.3.4 语言选项 23

3.3.5 库选项 23

表3-6 库选项 23

3.3.6 许可选项 24

3.3.7 过时的选项 24

表3-8 过时的选项 24

表3-7 许可选项 24

3.3.8 输出选项 25

表3-9 输出选项 25

表3-10 性能选项 26

3.3.9 性能选项 26

表3-13 参考选项 27

3.3.11 配置选项 27

表3-11 预处理器选项 27

表3-12 配置选项 27

3.3.10 预处理器选项 27

3.3.13 源选项 27

3.3.12 参考选项 27

表3-14 源选项 28

表3-15 模板选项 28

3.3.14 模板选项 28

3.3.15 线程选项 28

表3-16 线程选项 28

4.2 enum类型和变量的前置声明 30

第二部分 编写C++程序 30

第4章 语言扩展 30

4.1 重载更少限定性的虚函数 30

4.3 使用不完整的enum类型 31

4.4 将enum名作为范围限定词 31

4.5 使用匿名struct体声明 31

4.6 传递匿名类实例的地址 33

4.7 声明静态的命名空间函数作为类的友元 33

4.8 为函数名使用预定义_func_符号 34

第5章 程序组织 35

5.1 头文件 35

5.1.1 语言适应性头文件 35

5.1.2 幂等头文件 36

5.2 模板定义 36

5.2.1 包含式模板定义 37

5.2.2 分离式模板定义 37

6.1.2 函数模板定义 39

6.1.1 函数模板声明 39

6.1 函数模板 39

第6章 创建和使用模板 39

6.2.2 类模板定义 40

6.2.1 类模板声明 40

6.2 类模板 40

6.1.3 使用函数模板 40

6.2.3 类模板成员定义 41

6.3 模板实例化 42

6.2.4 使用类模板 42

6.3.3 显式模板实例化 43

6.3.1 隐式模板实例化 43

6.3.2 类整体实例化 43

6.4 模板合成 44

6.5 默认模板参数 45

6.6 模板特殊化 45

6.6.1 模板特殊化声明 45

6.6.2 模板特殊化定义 45

6.6.3 模板特殊化的使用和实例化 46

6.6.4 部分特殊化 46

6.7.2 本地类型作为模板参数 47

6.7.1 非本地命名解析和实例化 47

6.7 模板使用中的问题 47

6.7.3 模板函数的友元声明 48

本书代码例子 48

代码例子6-1 本地类型作为模板参数问题的例子 48

代码例子6-2 友元声明问题的例子 48

6.7.4 在模板定义中使用限定名 50

6.7.5 嵌套模板声明 51

6.7.6 引用静态变量和静态函数 51

6.7.7 在同一目录中建立多个使用模板的程序 51

第7章 编译模板 55

7.1 verbose编译 55

7.2 模板命令 55

7.3 模板实例的放置和连接 55

7.3.1 外部实例 56

7.3.3 全局实例 56

7.3.2 静态实例 56

7.3.4 显式实例 57

7.3.5 半显式实例 57

7.4 模板库 57

7.4.1 库结构 57

7.4.2 写入模板库 57

7.4.3 读取多个模板库 58

7.4.4 共享模板库 58

7.5 模板定义搜索 58

7.5.1 源文件定位规则 58

7.6 模板实例的自动一致性 59

7.5.2 定义搜索路径 59

7.8 模板选项文件 59

7.7 编译时间实例化 59

7.8.1 注释 60

7.8.2 文件包含 60

7.8.3 源文件扩展名 60

7.8.4 定义源位置 60

代码例子7-1 冗余的定义条目 61

代码例子7-2 静态数据成员的定义和简单名称的使用 61

代码例子7-3 模板成员函数的定义 61

7.8.5 模板特殊化入口 62

代码例子7-4 不同源文件中的模板函数的定义 62

代码例子7-5 nocheck选项 62

代码例子7-6 特殊化入口 63

代码例子7-9 特殊化一个模板类 63

代码例子7-7 应使用特殊化入口的例子 63

代码例子7-8 重载特殊化入口 63

代码例子7-10 特殊化静态模板类成员 64

第8章 异常处理 65

8.2 指定运行时错误 65

8.1 同步和异步异常 65

8.3 禁止异常 66

8.4 使用运行时函数和预定义的异常 66

8.5 带有信号和Setjmp/Longjmp的混合异常 67

8.6 建立带有异常的共享库 68

第9章 Cast操作符 69

9.1 const_cast 69

9.2 reinterpret_cast 70

9.3 static_cast 71

9.4 dynamic_cast 71

9.4.3 继承层次的向下和水平类型转换 72

9.4.1 继承层次的向上类型转换 72

9.4.2 转换为void 72

10.1 避免临时对象 76

第10章 增强程序性能 76

10.2 使用内联函数 76

10.3 使用默认操作 77

10.4 使用数值类 77

表10-1 不同体系结构传递struct和联合体的方式 78

10.4.1 选择直接传递类 78

10.4.2 各种处理器上直接传递类 78

10.5 缓存成员变量 79

第11章 多线程程序 80

11.1 建立多线程程序 80

11.1.1 隐式的多线程编译 80

11.1.2 使用C++支持的线程和信号库 81

11.2 在多线程程序中使用异常 81

11.3 在线程间共享C++标准库对象 81

11.4.1 MT-Safe iostream库的组织 84

表11-1 iostream原核心类 84

11.4 在多线程环境中使用经典的iostream 84

表11-2 MT-Safe的可重入公有函数 85

代码例子11-1 检测错误状态 86

代码例子11-2 调用gcount 87

代码例子11-3 用户定义的I/O操作 88

代码例子11-4 禁用MT-Safty 88

代码例子11-5 切换到MT-Unsafe 89

代码例子11-6 MT-Unsafe对象的同步 89

11.4.2 iostream库的接口变化 89

代码例子11-7 新类 90

代码例子11-8 新类层次 90

代码例子11-9 新的函数 91

11.4.3 全局和静态数据 92

11.4.4 顺序执行 93

11.4.5 象锁定 93

代码例子11-10 使用锁定操作的例子 94

11.4.6 MT-Safe类 95

11.4.7 象析构 95

代码例子11-11 使I/O操作和错误检查原子化 95

代码例子11-12 销毁一个共享对象 96

11.4.8 一个应用程序实例 96

代码例子11-13 以MT-Safe安全方式使用流对象 97

第12章 使用库 102

12.2 C++编译器提供的库 102

12.1 C库 102

表12-1 和C++编译器一起提供的库 102

第三部分 库 102

12.2.1 C++库的描述 103

12.2.2 访问C++库的手册页 104

12.2.3 默认的C++库 104

12.3 相关的库选项 105

12.4 使用类库 106

12.4.1 iostream库 106

12.4.2 复数库 107

12.4.3 连接C++库 108

12.5 静态连接标准库 109

表12-2 连接C++库的编译器选项 109

12.6 使用共享库 110

12.7.1 哪些可以被替换 111

12.7 替换C++标准库 111

12.7.4 使用替换的库 112

12.7.5 标准头文件的实现 112

12.7.2 哪些不能被替换 112

12.7.3 安装替换的库 112

表12-3 头文件搜索的例子 113

第13章 使用C++的标准库 115

13.1 C++标准库头文件 116

表13-1 C++标准库的头文件 116

表13-2 C++标准库手册 117

13.2 C++标准库手册页 117

13.3 STLport 126

第14章 使用经典的iostream库 128

14.1 共享libiostream 128

14.2 预定义的iostream 129

14.3 iostream交互的基本结构 129

表14-1 iostream例程的头文件 130

14.4 使用经典的iostream库 130

14.4.1 使用iostream输出 131

14.4.2 使用iostream输入 133

14.4.4 使用char的提取符 134

14.4.3 定义自己的提取操作符 134

代码例子14-1 string提取操作符 134

14.4.5 读任意的单独字符 135

14.4.6 二进制输入 135

14.4.7 查看输入字符 135

14.4.8 提取空白字符 136

14.4.9 处理输入错误 136

14.5 创建iostream 137

14.4.10 使用iostream和stdio 137

14.6 iostream的赋值 140

14.7 格式控制 140

14.8 操纵符 140

表14-2 iostream预定义的操纵符 140

14.8.1 使用无格式的操纵符 141

14.8.2 带参数的操纵符 142

14.9 数组的strstreams:iostream 144

14.10 stdio文件的stdiobufs:iostream 144

14.11 streambuf 144

14.11.1 处理streambuf 144

14.12 iostream手册页 145

14.11.2 使用streambuf 145

14.13 iostream的术语 146

表14-3 iostream手册页概述 146

表14-4 iostream术语 147

第15章 使用复数库 148

15.1 复数库 148

15.2 复数类型 149

15.2.1 complex类的构造函数 149

15.2.2 算术操作符 150

15.3 算术函数 150

15.4 错误处理 151

表15-1 复数算术库的函数 151

表15-2 复数的算术和三角函数 151

表15-3 复数算术库函数的默认错误处理 152

15.5 输入和输出 152

15.6 混合模式的算术 153

表15-4 complex类型的手册页 154

15.8 复数的手册页 154

15.7 效率 154

16.1 理解库 155

第16章 创建库 155

16.3 创建动态(共享)库 156

16.2 创建静态(文档)库 156

16.4 创建包含异常的共享库 157

16.5 创建私用的库 157

16.6 创建公用的库 157

16.7 创建一个有C API的库 158

16.8 使用dlopen从C程序访问C++库 158

附录A C++编译器选项 162

A.1 选项信息是如何组织的 162

附录 162

表A-2 选项分段 162

表A-1 选项语法格式举例 162

A.2 选项参考 163

A.2.1 -386 163

A.2.2 -486 163

A.2.3 -a 163

A.2.4 -Bbinding 163

A.2.5 -c 164

A.2.6 -cg{89192} 165

A.2.7 -compat[={4|5}] 165

A.2.8 +d 166

A.2.9 -D[]name[=def] 167

表A-3 预定义宏 167

A.2.10 -d{y|n} 168

A.2.11 -dalign 169

A.2.12 -dryrun 169

A.2.13 -E 169

代码例子A-1 预处理器例子程序foo.cc 170

代码例子A-2 使用-E选项的预处理器输出 170

A.2.14 +e{0|1} 170

A.2.15 -fast 171

表A-4 -fast扩展 171

A.2.16 -features=a[,a...] 173

表A-5 兼容模式和标准模式的-features选项 173

表A-6 仅用于标准模式的-features选项 174

表A-7 仅用于兼容模式的-features选项 174

表A-8 -filt选项 175

A.2.17 -filt[=filter[,filter...]] 175

A.2.20 -fns[={yes|no}] 177

A.2.19 -fnonstd 177

A.2.18 -flags 177

A.2.21 -fprecision=p 178

A.2.22 -fround=r 179

A.2.23 -fsimple[=n] 180

A.2.25 -ftrap=t[,t...] 181

A.2.24 -fstore 181

A.2.26 -G 182

A.2.27 -g 183

A.2.30 -h[]name 184

A.2.29 -H 184

A.2.28 -g0 184

A.2.32 -Ipathname 185

A.2.31 -help 185

A.2.33 -I 185

A.2.34 -i 187

A.2.35 -inline 187

A.2.36 -instances=a 187

A.2.37 -keeptmp 188

A.2.38 -KPIC 188

A.2.39 -Kpic 188

A.2.40 -Lpath 188

A.2.44 -library=l[,l...] 189

A.2.43 -libmil 189

A.2.42 -libmieee 189

A.2.41 -llib 189

表A-9 兼容模式的-library选项 190

表A-10 标准模式的-library选项 190

A.2.45 -mc 193

A.2.46 -migration 193

A.2.47 -misalign 193

A.2.49 -mt 194

A.2.48 -mr[,string] 194

A.2.50 -native 195

A.2.51 -noex 195

A.2.52 -nofstore 195

A.2.53 -nolib 195

A.2.54 -nolibmil 195

A.2.55 -noqueue 195

A.2.56 -norunpath 195

A.2.59 -O filename 196

A.2.60 +p 196

A.2.57 -O 196

A.2.58 -Olevel 196

A.2.61 -P 197

A.2.62 -p 197

A.2.63 -pentium 197

A.2.64 -Pg 197

A.2.65 -PIC 197

A.2.66 -pic 197

A.2.70 -ptr 198

A.2.72 -Qoption phase option[,option...] 198

A.2.71 -ptv 198

A.2.69 -pto 198

A.2.68 -ptipath 198

A.2.67 -pta 198

A.2.73 -qoption phase option 199

A.2.74 -qp 199

A.2.75 -Qproduce sourcetype 199

A.2.76 -qproduce sourcetype 200

A.2.77 -Rpathname[:pathname...] 200

A.2.78 -readme 200

A.2.79 -S 200

A.2.80 -s 201

A.2.81 -sb 201

A.2.82 -sbfast 201

A.2.83 -staticlib=l[,l...] 201

A.2.84 -temp=path 202

A.2.85 -template=opt[,opt...] 203

A.2.86 -time 203

A.2.87 -Uname 203

A.2.88 -unroll=n 204

A.2.89 -V 204

A.2.90 -v 204

A.2.91 -vdelx 204

A.2.92 -verbose=v[,v...] 204

A.2.93 +w 205

A.2.94 +w2 205

A.2.97 -xalias_level[=n] 206

A.2.95 -w 206

A.2.96 -xa 206

A.2.98 -xar 208

A.2.99 -xarch=isa 209

表A-11 SPARC平台的-xarch值 209

A.2.100 -xbuiltin[={%all|%none}] 211

表A-12 IA平台的-xarch值 211

A.2.101 -xcache=c 212

A.2.102 -xcg89 213

A.2.103 -xcg92 213

A.2.104 -xcheck[=i] 214

A.2.105 -xchip=c 214

表A-13 -xcheck值 214

表A-14 -chip选项 215

A.2.106 -xcode=a 215

A.2.107 -xcrossfile[=n] 216

表A-15 -xcode选项 216

A.2.110 -xhelp=readme 217

A.2.108 -xF 217

A.2.109 -xhelp=flags 217

A.2.111 -xia 218

A.2.112 -xildoff 218

A.2.113 -xildon 218

表A-16 -xinline选项 219

A.2.114 -xinline[=func_spec [,func_spec...]] 219

A.2.115 -xipo[={0|1|2}] 220

A.2.116 -xlang=language[,language] 221

A.2.118 -xlibmil 222

A.2.117 -xlibmieee 222

A.2.119 -xlibmopt 223

A.2.120 -xlic_lib=sunperf 223

A.2.122 -Xm 224

A.2.123 -xM 224

A.2.124 -xMl 224

A.2.125 -xMerge 224

A.2.121 -xlicinfo 224

A.2.127 -xnolib 225

A.2.126 -xnativeconnect[=i] 225

A.2.128 -xnolibmil 227

A.2.129 -xnolibmopt 227

A.2.130 -xopenmp[=i] 227

A.2.131 -xOlevel 228

A.2.132 -xpg 230

A.2.133 -xprefetch[=a[,a]] 230

表A-17 -xprefetch值 231

A.2.134 -xprefetch_level[=i] 232

表A-18 -xprefetch_level值 232

表A-19 -xprofile选项 233

A.2.135 -xprofile=p 233

A.2.136 -xregs=r[,r...] 234

A.2.137 -xs 235

A.2.138 -xsafe=mem 235

A.2.139 -xsb 236

A.2.140 -xsbfast 236

A.2.141 -xspace 236

A.2.142 -xtarget=t 236

表A-20 SPARC平台的-xtarget值 236

表A-21 -xtarget的SPARC平台名称 237

表A-23 Intel结构的-xtarget扩展 241

表A-22 IA平台的-xtarget值 241

A.2.143 -xtime 242

A.2.144 -xunroll=n 242

A.2.145 -xtrigraphs[={yeslno}] 242

A.2.146 -xwe 243

A.2.147 -z[]arg 244

附录B Pragmas 245

B.1 Pragma的格式 245

B.2 Pragma参考 246

B.2.1 #pragma align 246

B.2.2 #pragma init 246

B.2.3 #pragma fini 247

B.2.5 #pragma no_side_effect 247

B.2.4 #pragma ident 247

表B-2 存储空间字节和默认空间分配字节 248

表B-1 平台最大空间分配值表A-18 -xprefetch_level值 248

B.2.6 #pragma pack(n) 248

B.2.7 #pragma retums_new_memory 249

B.2.8 #pragma unknown_control_flow 249

B 2.9 #pragma weak 250

附录C Sun ONE Studio 7, Solaris企业版浏览向导(原Forte Developer,企业版7) 252

C.1 启动Sun ONE Studio 7——用于Solaris IDE的企业版 252

C.1.1 获得产品许可 253

C.1.2 安装Sun ONE Studio 7——用于Solaris产品企业版 253

C.1.3 访问Sun ONE Studio 7——用于Solaris在线产品的企业版 253

C.1.4 系统需求 253

C.1.5 开始浏览 254

C.2 创建代码 257

C.2.1 Makefile向导 257

C.2.2 启动Build 258

C.2.3 其他的创建特性 259

C.3 本地连接器工具 260

C.3.1 运用范例 260

C.3.3 创建共享库 261

C.3.2 设置环境 261

C.3.4 创建本地连接器描述文件 262

C.3.5 选择用于Java API的接口 263

C.3.6 生成本地连接器组件 264

C.3.7 执行文件状态程序 265

C.4.2 开始调试程序 266

C.4.1 准备一个用于调试的程序 266

C.4 调试器 266

C.4.3 打开调试器窗口 268

C.4.5 设置断点 269

C.4.4 单步执行代码 269

C.4.6 运行程序 269

C.4.7 使用Fix和Continue 271

C.4.8 使用运行时检查 272

C.4.9 设置监视 273

C.4.10 调试Java程序 274

C.4.11 其他调试特性 278

C.5 性能分析器 279

C.5.1 性能分析 279

C.5.2 分析数据 279

C.6 用于Solaris的Sun ONE Studio 7企业版的工具 283

C.6.1 X-Designer软件 283

C.6.2 支持CVS 284

C.6.3 具体语言的特性 284

C.7 获得更多信息 285

术语表 286