C++编程常见错误整理

       最近,我在阅读《C++ Primer》,经常看到里面提到一些错误类型,像“编译错误”、“运行错误”等。于是,我对C++中的错误类型产生了兴趣,查阅了一些资料,特整理如下。

       (一) 程序错误分类

        在C++中,程序错误分为三类:语法错误(syntax error)、逻辑错误运行错误

        语法错误指违背了C++语言的规定,主要是语句的结构或拼写中存在的错误。

        逻辑错误是由于程序设计人员设计的算法有错或编写的程序有错,通知给系统的指令与解题的原意不相同,即出现了逻辑上的混乱。

        运行错误是由系统运行环境造成的,即在运行时出现的错误。

       (二) 一些常见的错误现象

       1. 与变量有关的错误

       (1)忘记定义变量;

       (2)变量名命名不当;

       (3)数据类型不一致;

       (4)字符常量与字符串常量使用不当;

       (5)输入输出的数据的类型与所用的格式说明符不一致;

       (6)未注意int型数据的数值范围;

       (7)输入数据的形式与要求不符;

       (8)在使用标识符时,忘记了大写字母与小写字母的区别;

       (9)在定义数组时,将定义的“元素个数”误以为是“可使用的最大下标值”;

      (10)对二维或多维数组的定义和引用的方法不对;

      (11)误以为数组名代表数组中全部元素;

      2. 与操作符有关的错误

     (1)比较运算符与赋值运算符使用上的错误;

     (2)因使用自增与自减运算符不当导致的错误(使用自加(++)和自减(--)运算符时出现的错误);

     (3)误把“=”作为“等于”运算符;

     (4)在输入语句scanf中忘记使用变量的地址符。

     3. 与标点符号有关的错误

     (1)语句后面漏分号;

     (2)在不该加分号的地方加了分号;

     (3)对应该有花括号的复合语句,忘记加花括号;

     (4)括号不配对;

     (5)引用数组元素时误用了圆括号。

     4. 与指针有关的错误

     (1)混淆字符数组与字符指针的区别;

     (2)在引用指针变量之前,没有对它赋予确定的值;

     (3)不同类型的指针混用;

     (4)混淆数组名与指针变量的区别。

     5. 与语句有关的错误

     (1)switch语句的各分支中漏写break语句;

     (2)混淆字符和字符串的表示形式;

     (3)在需要加头文件时没有用#include命令去包含头文件。

     6. 与函数有关的错误

    (1)所调用的函数在调用语句之后才定义,而又在调用前未声明;

    (2)对函数声明与函数定义不匹配;

    (3)误以为形参值的改变会影响实参的值;

    (4)函数的实参和形参类型不一致;

    (5)没有注意函数参数的求值顺序。

     7. 其它错误

    (1)混淆结构体类型与结构体变量的区别,对一个结构体类型赋值;

    (2)使用文件时忘记打开,或打开方式与使用情况不匹配。

 

       总的说来,在编写程序的过程中,我们肯定会遇到错误的,因为“试图一下子就能写出一个完全成功的程序几乎是不可能的”。当我们有了丰富的编程经验之后,面对各种错误便能够轻松解决了!

 

 

 

参考文献

[1]    C++ Primer(中文第三版),中国电力出版社。

[2]    C程序设计(第三版),谭浩强(著),清华大学出版社。

[3]    C++编程常见错误分类与解析[J],孙爱民,漯河职业技术学院学报(综合版),2006年4月。

时间: 2024-11-02 16:30:39

C++编程常见错误整理的相关文章

理解C语言——从小菜到大神的晋级之路(14)——C编程常见错误

本期视频:点击这里 1.混淆变量的作用域和生存期 变量的作用域和生存期实际上是两个完全不同的概念. 变量的作用域:可以应用这个变量的范围,强调变量使用的空间范围: 变量的生存期:变量的生命周期,强调变量有效的时间:        这两个概念中,作用域更强调变量可以被引用,而生存期更强调其本身是否存在,这二者实际上并没有必然联系.通常情况下,如果处于某个变量的作用域内,那么这个变量一定还在生存期:但是相反,某个变量已经不在其作用域,并不意味着其生存期已结束.变量的生存期常常远大于其作用域.    

Android常见错误 整理收集

1.Unable to resolve target 'android-2' 安装低版本的api,再default.properties 这个文件中把target=android-2 改成 target=android-7终于就没有问题了. 2.Invalid start tag LinearLayout main.xml放错文件夹了,应该在\res\layout下. 3.INSTALL_FAILED_INSUFFICIENT_STORAGE 原因:SD卡内存容量不够 法一:在下图的"Addit

SSH2框架整合常见错误整理【不断更新中】

又一个问题1. 当在几种框架集成的时候,在调用HibernateDaoSupport中的某个方法时会出现: java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I 的错误.这是因为在struts2自带的antlr-2.7.2.jar包的版本较低. 需要换成antlr-2.7.6.jar.其实在项目中已经存在了antlr-2.7.6.jar这个包,现在唯一需要做的就是删除antlr-2.7.2.jar包. 选择windows---

Android笔记整理之常见错误及解决方案汇总_Android

一.No active compatible AVD's or devices found. Relaunch this configuration after connecting a device or starting an AVD. 修改adb server的端口,设置一个系统环境变量ANDROID_ADB_SERVER_PORT,值7913(随意一个数字),再启动adb server 步骤: a)进入cmd命令模式 b)cd XXX\platform-tools c)adb start

Android笔记整理之常见错误及解决方案汇总

一.No active compatible AVD's or devices found. Relaunch this configuration after connecting a device or starting an AVD. 修改adb server的端口,设置一个系统环境变量ANDROID_ADB_SERVER_PORT,值7913(随意一个数字),再启动adb server 步骤: a)进入cmd命令模式 b)cd XXX\platform-tools c)adb start

ASP中数据库调用常见错误解决

错误|解决|数据|数据库 下面是虚机维护中,经常碰到的一些ASP程序中的数据库调用的错误,现收集整理如下: 不能打开注册表关键字(8007000e) Microsoft OLE DB Provider for ODBC Drivers 错误 '8007000e' [Microsoft][ODBC Microsoft Access Driver]常见错误 不能打开注册表关键字 'Temporary (volatile) Jet DSN for process 0x11b4 Thread 0x1a4

审查Java代码的十一种常见错误

代码审查是消灭Bug最重要的方法之一,这些审查在大多数时候都特别奏效.由于代码审查本身所针对的对象,就是俯瞰整个代码在测试过程中的问题和Bug.并且,代码审查对消除一些特别细节的错误大有裨益,尤其是那些能够容易在阅读代码的时候发现的错误,这些错误往往不容易通过机器上的测试识别出来.本文就常见的Java代码中容易出现的问题提出一些建设性建议,以便您在审查代码的过程中注意到这些常见的细节性错误. 通常给别人的工作挑错要比找自己的错容易些.别样视角的存在也解释了为什么作者需要编辑,而运动员需要教练的原

WCF分布式开发常见错误(18):Binding validation failed绑定协议验证失败

测试WCF MSMQ编程时候遇到这个错误:绑定协议验证失败,具体信息:Binding validation failed because the binding's MsmqAuthenticationMode property is set to WindowsDomain but MSMQ is installed with Active Directory integration disabled. The channel factory or service host cannot be

WCF分布式开发常见错误(14):无效的操作异常,At least one operation on the .

WCF事务编程过程中,会出现这个操作无效异常.信息如下: At least one operation on the 'WCFServiceTransaction1' contract is configured with the TransactionFlowAttribute attribute set to Mandatory but the channel's binding 'NetTcpBinding' is not configured with a TransactionFlow