【C++ Primer 学习笔记】chapter6 语句
2012-08-29 16:26
176 查看
习题6.16
在输入两个vector的元素时可以用特定值标记输入,也可以用文件结束符(输入ctrl+z)来控制元素输入的结束,使用后一种方法的时候,在第二个输入循环钱要记得将流cin恢复为有效状态
6.13 try块和异常处理
在<stdexcept>头文件中定义的标准异常类
exception 最常见的问题
runtime_error 运行时错误:仅在运行时才能检测的问题
range_error 运行时错误:生成的结果超出了有意义的值域范围
overflow_error 运行时错误:计算上溢
underflow_error 运行时错误:计算下溢
logic_error 逻辑错误:可在运行前检测到的问题
domain_error 逻辑错误:参数的结果值不存在
invalid_error 逻辑错误:不合适的参数
length_error 逻辑错误:试图生成一个超出该类型最大长度的对象
out_of_range 逻辑错误:使用一个超出有效范围的值
6.14 使用预处理器进行调试
1)使用NDEBUG预处理变量
#ifndef NDEBUG
cerr<<" "<<endl;
#endif
默认情况下,NDEBUG未定义,这意味着必须执行#ifndef 和#endif之间的代码。
开发过程中,保持未定义NDEBUG就会执行其中的调试语句,开发完成后,可通过定义NDEBUG,删除这些调试语句。
2)assert预处理宏
assert() 宏用法
注意:assert是宏,而不是函数。在C的assert.h 头文件中。
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:
#include <assert.h>
void assert( int expression );
assert的作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,
然后通过调用 abort 来终止程序运行。
使用assert的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。 在调试结束后,可以通过在包含#include <assert.h>的语句之前插入 #define NDEBUG 来禁用assert调用。
在输入两个vector的元素时可以用特定值标记输入,也可以用文件结束符(输入ctrl+z)来控制元素输入的结束,使用后一种方法的时候,在第二个输入循环钱要记得将流cin恢复为有效状态
cout<<"请输入第一个int型vector对象ivec1中的元素:(ctrl+z to end)"<<endl; while(cin>>num1) ivec1.push_back(num1); fflush(stdin);//加入这句清除缓冲区。先清除再设置流状态 cin.clear(); //将cin恢复为有效状态 cout<<"请输入第二个int型vector对象ivec2中的元素:(ctrl+z to end)"<<endl; while(cin>>num2) ivec2.push_back(num2);
6.13 try块和异常处理
在<stdexcept>头文件中定义的标准异常类
exception 最常见的问题
runtime_error 运行时错误:仅在运行时才能检测的问题
range_error 运行时错误:生成的结果超出了有意义的值域范围
overflow_error 运行时错误:计算上溢
underflow_error 运行时错误:计算下溢
logic_error 逻辑错误:可在运行前检测到的问题
domain_error 逻辑错误:参数的结果值不存在
invalid_error 逻辑错误:不合适的参数
length_error 逻辑错误:试图生成一个超出该类型最大长度的对象
out_of_range 逻辑错误:使用一个超出有效范围的值
6.14 使用预处理器进行调试
1)使用NDEBUG预处理变量
#ifndef NDEBUG
cerr<<" "<<endl;
#endif
默认情况下,NDEBUG未定义,这意味着必须执行#ifndef 和#endif之间的代码。
开发过程中,保持未定义NDEBUG就会执行其中的调试语句,开发完成后,可通过定义NDEBUG,删除这些调试语句。
2)assert预处理宏
assert() 宏用法
注意:assert是宏,而不是函数。在C的assert.h 头文件中。
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:
#include <assert.h>
void assert( int expression );
assert的作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,
然后通过调用 abort 来终止程序运行。
/* assert example */ #include <stdio.h> #include <assert.h> void print_number(int* myInt) { assert (myInt!=NULL); printf ("%d\n",*myInt); } int main () { int a=10; int * b = NULL; int * c = NULL; b=&a; print_number (b); print_number (c); return 0; }
使用assert的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。 在调试结束后,可以通过在包含#include <assert.h>的语句之前插入 #define NDEBUG 来禁用assert调用。
相关文章推荐
- C++ Primer 学习笔记12 函数(return语句、函数声明、局部对象、内联函数、类的成员函数、重载函数)
- C++ Primer 学习笔记与思考_11 try..catch语句及相关疑点
- C++ Primer 学习笔记(五)——语句
- C++ Primer学习笔记之第五章--语句
- C++ Primer 学习笔记10 语句 (空语句、if语句、switch语句、for语句、dowhile语句、break语句、goto语句、continue语句、try块和异常处理)
- [C++ primer 学习笔记][05]表达式和语句
- C++ Primer 学习笔记_19_语句 --if/switch/while/for语句
- C++ Primer 学习笔记(第五章:语句)
- C++ Primer 学习笔记_20_语句(续) --break/continue/try,catch
- c++ primer(第五版)学习笔记及习题答案代码版(第五章)语句
- C++ Primer 学习笔记_22_函数(续1) --return语句、递归调用、函数声明
- C++ Primer复习和学习笔记 第六章 语句
- 笔试SQL语句——学习笔记
- 【C++ Primer】【学习笔记】【第三章】标准库类型之:vector类型
- C++ Primer 学习笔记_77_模板与泛型编程 -实例化
- C++ Primer学习笔记:变量使用小结
- mysql增改查的sql语句学习笔记
- Swift学习笔记(二十七)——条件语句和Switch-case语句
- sql学习笔记(5)---------有关时间查询语句
- Python学习笔记 —— 逻辑语句