try块和异常处理,断言assert
2016-03-02 22:23
495 查看
1、try块和异常处理
博客参考
2、断言assert
assert 一种预处理宏,使用单个表达式作为断言条件。如果,预处理变量NDEBUG没有定义,则assert将求解它的条件表达式。若条件为false,assert输出信息并终止程序的执行。
一种调试技术:
使用NDEBUG预处理变量和assert。assert只用于检查确实不可能的条件,比如数据中确实不会出现0等。
然后,编译时使用 CC -DNDEBUG main.c,就会不编译assert。
博客参考
#include <iostream> #include <stdexcept> using namespace std; double func(int x,int y) { if(y == 0) { throw runtime_error("dividing zero!\n"); } return x / y; } int str2int(string str) { int value = 0; for(size_t i = 0; i < str.size();i++){ if(str[i] < '0' || str[i] > '9'){ throw invalid_argument("para must be integer!\n"); } value =value * 10 + (str[i] - '0'); } return value; } int main() { string str1,str2; int val1,val2; while(cin>>str1>>str2) { try{ double r; r = func(str2int(str1),str2int(str2)); cout<<"ans:"<<r<<endl; } catch(runtime_error err){ cout<<err.what()<<endl; } catch(invalid_argument err){ cout<<err.what()<<endl; } } return 0; }
2、断言assert
assert 一种预处理宏,使用单个表达式作为断言条件。如果,预处理变量NDEBUG没有定义,则assert将求解它的条件表达式。若条件为false,assert输出信息并终止程序的执行。
一种调试技术:
使用NDEBUG预处理变量和assert。assert只用于检查确实不可能的条件,比如数据中确实不会出现0等。
然后,编译时使用 CC -DNDEBUG main.c,就会不编译assert。
相关文章推荐
- Android Camera数据流分析全程记录(非overlay方式)
- Educational Codeforces Round 9 B. Alice, Bob, Two Teams 前缀和
- [转] 机器视觉开源代码集合
- 学习c语言
- Thread的理解
- iOS键盘的弹出与关闭总结
- SVN代码冲突
- 1.(c语言)产生随机数(rand()和srand()的配合使用)
- 用POI获取excel表中的图片位置及数据
- 《春日记》开发记录【4】
- Eclipse控制台输出中文乱码问题的解决
- 安卓杂乱基础
- 信息安全之网络安全初体验(保密向)(一)
- android Security Tips
- 【Usaco2015 JAN】Cow Rectangles
- android下camera数据流的分析
- 【转】Kriging插值法
- virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续)
- Eclipse: 在JSP 页面中 找不到类 javax.servlet.http.HttpServletResponse
- OpenLDAP主配置文件slapd.conf介绍