| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C++编程常见错误及处理 -> 正文阅读 |
|
[C++知识库]C++编程常见错误及处理 |
C++编程常见错误及处理在 C++ 程序错误一般分类: 语法错误;运行错误;语义错误(也称逻辑错误)。本文介绍相关错误产生的原因及处理。 语法错误(syntax errors)是指程序中含有不符合语法规定的语句,在编译过程中显现,如:
1)引号、逗号、分号,运算符是英文的,而不能是中文的,注意切换输入法。 2)变量未定义就用,注意C++ 严格区分大小写,在写关键字、标识符要注意int为关键字,INT则为用户标识符,即可定义int INT;? int Int; 3)变量赋值、运算时显示类型不匹配(如:int a=2;float b=2.001;当使a=b时) 处理:编译阶段报错,根据报错的信息,我们修改代码,再次编译,直到没有语法错误为止。 【特别提示:在编译语言(本文介绍的C++)中,语法错误在编译期时出现,编译器要所有的语法都正确,才能正确编译。解释型语言(如python)的语法错误可能要到运行期才会出现,不容易区分语法错误及语义错误。还有些采用混合方式(如JAVA、C#),先将代码编译为bytecode,在运行时再进行解释。 解释型语言(Interpreted language),是一种编程语言。这种类型的编程语言,逐句解释(将代码一句一句直接)运行,不需要像编译语言(Compiled language)一样,经过编译器先行编译为机器码,之后再运行。】 运行错误(runtime errors)运行过程中,程序可能出现错误。这些错误属于运行错误,不会在编译过程中显现,如: 打开不存在的文件、下标越界,栈溢出等。 C++ 异常(Exception)机制就是为解决运行时错误而引入的。运行时错误如果放任不管,系统就会执行默认的操作,终止程序运行,也就是我们常说的程序崩溃(Crash)。C++ 提供了异常(Exception)机制,让我们能够捕获运行时错误,给程序一次“起死回生”的机会,或者至少告诉用户发生了什么再终止程序。 一个发生运行时错误的程序:
运行之效果如下: 运行代码,在控制台输出 ch1 的值后程序崩溃。下面我们来分析一下原因。 at() 是 string 类的一个成员函数,它会根据下标来返回字符串的一个字符。与[ ]不同,at() 会检查下标是否越界,如果越界就抛出一个异常;而[ ]不做检查,不管下标是多少都会照常访问。at() 函数检测到下标越界会抛出一个异常,这个异常可以由程序员处理,但是我们在代码中并没有处理,所以系统只能执行默认的操作,也即终止程序执行。 我们可以借助 C++ 异常机制来捕获上面的异常,避免程序崩溃。捕获异常的语法为: try{ ??? // 可能抛出异常的语句 }catch(exceptionType variable){ ??? // 处理异常的语句 } try和catch都是 C++ 中的关键字,后跟语句块,不能省略{ }。try 中包含可能会抛出异常的语句,一旦有异常抛出就会被后面的 catch 捕获。从 try 的意思可以看出,它只是“检测”语句块有没有异常,如果没有发生异常,它就“检测”不到。catch 是“抓住”的意思,用来捕获并处理 try 检测到的异常;如果 try 语句块没有检测到异常(没有异常抛出),那么就不会执行 catch 中的语句。catch 关键字后面的exceptionType variable指明了当前 catch 可以处理的异常类型,以及具体的出错信息。 修改上面的代码,加入捕获异常的语句:
?运行之效果如下: 可以看出,第一个 try 没有捕获到异常,输出了一个没有意义的字符(垃圾值)。因为[ ]不会检查下标越界,不会抛出异常,所以即使有错误,try 也检测不到。换句话说,发生异常时必须将异常明确地抛出,try 才能检测到;如果不抛出来,即使有异常 try 也检测不到。所谓抛出异常,就是明确地告诉程序发生了什么错误。 第二个 try 检测到了异常,并交给 catch 处理,执行 catch 中的语句。需要说明的是,异常一旦抛出,会立刻被 try 检测到,并且不会再执行异常点(异常发生位置)后面的语句。本例中抛出异常的位置是第at() 函数,它后面的 cout 语句就不会再被执行,所以看不到它的输出。执行完 catch 块所包含的代码后,程序会继续执行 catch 块后面的代码,就恢复了正常的执行流,输出了“呵呵”。 C++ 异常处理(try catch)https://blog.csdn.net/qq_26460841/article/details/88352736 C++ 高级教程之异常处理 https://bbs.huaweicloud.com/blogs/281241 语义错误(semantic errors)也称逻辑错误(Logic error),编译没有报错,运行也没有抛出异常,但是输出的结果不正确,可能是语句中公式写错、条件语句的条件写错如if(a==b)误用为if(a=b)、算法错误或选择了错误的算法,变量作用域错误、对问题或需求的理解有误等。如:求一个数的阶乘,代码中的for语句中的i <= n误写为i < n 造成输出的结果不正确:
运行之效果如下: 处理:细心审读程序代码,分析思考,可以在程序中插入打印语句、显示程序的动态过程,还可借助调试工具(Debugger)。 上例比较简单,细心审读程序代码不难发现出错的原因。下面特意演示插入调试用打印语句的示例: 运行之效果如下:
|
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 17:10:18- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |