资源描述:
《pclint测试c或c++实例》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、PC-lint测试C/C++实例实例1:test.cpp1#include2classX3{4int*p;5public:6X()7{p=newint[20];}8voidinit()9{memset(p,20,'a');}10~X()11{deletep;}12};编译这个文件,VC6.0产生0errors0warnings,而lint程序产生了如下8条警告信息,有些还是很有用处的提示。PC-lint告警信息:test.cpp(12):error783:(Info--Linedoesnotendwit
2、hnew-line)test.cpp(7):error1732:(Info--newinconstructorforclass'X'whichhasnoassignmentoperator)test.cpp(7):error1733:(Info--newinconstructorforclass'X'whichhasnocopyconstructor){memset(p,20,'a');}test.cpp(9):error669:(Warning--Possibledataoverrunforfunction'memset
3、(void*,int,unsignedint)',argument3(size=97)exceedsargument1(size=80)[Reference:test.cpp:lines7,9])test.cpp(7):error831:(Info--Referencecitedinpriormessage)test.cpp(9):error831:(Info--Referencecitedinpriormessage){deletep;}test.cpp(11):error424:(Warning--Inappropri
4、atedeallocation(delete)for'new[]'data)---Wrap-upforModule:test.cpptest.cpp(2):error753:(Info--localclass'X'(line2,filetest.cpp)notreferenced)error900:(Note--Successfulcompletion,8messagesproduced)根据错误提示修改后的程序如下:#includeclassX/*lint-e753*///只声明实现类X,没有写mai
5、n()应用类x,故可以屏蔽。{int*p;public:X()//构造函数{p=NULL;}X(constX&x)//拷贝构造函数{p=newint[20];memcpy(p,x.p,20*sizeof(int));}X&operator=(constX&x)//赋值操作符{if(this==&x)//检查自赋值{return*this;}int*temp=newint[20];memcpy(temp,x.p,20*sizeof(int));//复制指针指向内容delete[]p;//删除原有指针(将删除操作符放在后面,避
6、免X=X特殊情况下,内容的丢失)p=temp;//建立新指向return*this;}voidinit(){if(NULL==p)return;//判断指针是否为空memset(p,'a',20*sizeof(int));}~X(){delete[]p;}};//在};后面回车换行以消除告警test.cpp(12):error783:(Info--Linedoesnotendwithnew-line)注意:为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符(可参考effective_c++2e条款11)再次运行pc
7、lintPC-lintforC/C++(NT)Vers.9.00a,CopyrightGimpelSoftware1985-2008---Module:test.cpp(C++)---GlobalWrap-uperror900:(Note--Successfulcompletion,0messagesproduced)实例2:实现输入的两个复数的四则运算。/****************************************Filename:Complex.hFunction:Asimplecomplexcal
8、culatordemo ****************************************/#includeusingnamespacestd;classcomplex{public://publicinterfacecomplex(doubler,doublei