C++概论(C语言过度版)_第1页
C++概论(C语言过度版)_第2页
C++概论(C语言过度版)_第3页
C++概论(C语言过度版)_第4页
C++概论(C语言过度版)_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

历史简介

C语言之所以要起名为“C”,是取的“BCPL”的第二

个字母(第一个字母用来命名之前被发明的B语言)。

当C语言发展到顶峰的时刻,出现了一个版本叫Cwith

Class,那遍C++最早的版本,在C语言中增加class

关键字和类,那个时候有很多版本的C都希望在C语言

中增加类的概念;后来C标准委员会决定为这个版本的

C起个新的名字,那个时候征集了很多种名字,最后采

纳了其中一个人的意见,以C语言中的++运算符来体现

它是C语言的进步,故而叫C++,成立了C++标准委

员会。

美国AT&T贝尔实验室的本贾尼・斯特劳斯特卢普

(BjarneStroustruu)博士在20世纪80年代初期发

明并实现了C++(最初这种语言被称作“Cwith

1

Classes()o一开始C++是作为C语言的增强版出现

的,从给C语言增加类开始,不断的增加新特性。虚函

数(virtualfunction)、运算符重载(operator

overloading)、多重继承(multipleinheritance)、

模板(template)、异常(exception)、RTTI、命名

空间(namespace)逐渐被加入标准。1998年国际标

准组织(ISO)颁布了C++程序设计语言的国际标准

ISO/IEC1988-1998oC++是具有国际标准的编程语

宣,通常称作ANSI/ISOC++。1998年是C++标准

委员会成立的第一年,以后每5年视实际需要更新一次

标准,下一次标准更新原定是在2009年,目前我们一

般称该标准C++0x,但是由于对于新特性的争端激烈,

除了在TechnicalReport1(tr1)中的新增修改被基

本确定外,完整的标准还遥遥无期。况且遗憾的是,由

于C++语言过于复杂,以及经历了长年的演变,直到现

在(2010年)都没有有一个编译器完全符合这个标准。

据HerbSutter报告,C++Ox最终国际投票已于

周三(2011年8月10号)结束,所有国家都投出了赞

成票,C++Ox已经毫无疑义地成为正式国际标准。虽然

接下来还需要数月时间出版发布,但标准本身已经完全

正式成立了。

组成部分根据日fectiveC++第三版第一条款的描

述,现在C++由以下四个“子语言”组成:

1、C子语言。C++支持C语言的儿乎全部功能,

主要是C89的部分,在语法上与C语言仅有极微妙的差

别(如括号表达式的左右值性,具体请参考C++标准文

献)。

2、面向对象的C++语言。C++语言原本不具备面

向对象的设计功能,然而随着面向对象编程的概念的提

出以及如Java等语言的发展成熟,C++语言也开发出

了支持面向对象功能的版本.

3、泛型编程语言。C++强大(但容易失控的)模

板功能使它能在编译期完成许多工作,从而大大提高运

行期效率。

4、STL(C++标准模板库,StandardTemplate

Library)oOSTL的不断发展,它已经逐渐成为C++

程序设计中不可或缺的部分,其效率可能比一般的

native代码低些,但是其安全性与规范性使它大受欢迎。

此外,包含在TR1等中的C++Ox将实现的新功能

在开发和测试中。

语言发展

C++语言发展大概可以分为三个阶段:

第一阶段从80年代到1995年。这一阶段C++语

言基本上是传统类型上的面向对象语言,并且凭借着接

近C语言的效率,在工业界使用的开发语言中占据了相

当大份额;

第二阶段从1995年到2000年,这一阶段由于标

准模板库(STL)和后来的Boost等程序库的出现,泛型

程序设计在C++中占据了越来越多的比重性。当然,同

时由于Java、C#等语言的出现和硬件价格的大规模下

降,C++受到了一定的冲击;

第三阶段从2000年至今,由于以Lo区、MPL等程

序库为代表的产生式编程和模板元编程的出现,C++出

现了发展历史上又一个新的高峰,这些新技术的出现以

及和原有技术的融合,使C++已经成为当今主流程序设

计语言中最复杂的一员。

入门书籍

C++是一种语言,仅仅是它的语法、特性、标准类

库就已经是一门非常高深的课程,所以在开始学习的时

候,必须先要打好基础。在市面上有很多VisualC++

的书,虽然其中可能会花1-2章来介绍C++的基本特

性,但是那绝对不会让你入门。因此,初学者学习C++

应该选择针对C++语言本身的书籍,而不能是针对

VisualC++>MFC或者WindowsAPI的。

学习C++应该由易至难,循序渐进。以前经常有人

说学习C++之前应该学习C语言。事实上那不是必须的,

C++和c语言虽然有关系,但仍然是两种不同的语言。

当然,在学习C++之前学习过其他编程语言是很有好处

的。那会使学习C++的速度更快,毕竟很多计算机语言

的概念都是相通的。而对于零基础的初学者来说,则是

应该静下心来,不要急躁。要成为C++的高手,不是那

么容易的,必须要花很大的努力。

从入门教材的选择上,主要看学习者的自身情况。

如果已经有过学习高级语言的经历,那么推荐使用谭浩

强的《C++程序设计》。注意是04年版的,06年版的

那本书是阉割版,上来就面向对象。虽然说C和C++是

相似的,但是前面已经说了,C和C++应该作为两种语

言来学习,所以06年的那本内容就稍微欠缺一点了。谭

浩强04版的这本书内容比较规整的,条理也很清晰。如

果有过其他高级语言的基础,那么估计半年就能对C++

的概况有个了解了。谭浩强老师的书已经成为了全国各

大高等院校的教科书,是比较受到认可的。

如果是从零基础开始学C++,那么推荐使用潘嘉杰

的《易学C++》。这本书是2008年出的新书,听说是

个学生在读书的时候写的。这本书网上有下载免费的电

子版。这本书主要就是针对初学者的,讲得也比较生动

有趣,比较提得起学习的兴趣。所以没有基础的初学者

选这本书也是不错的,就是想要很快成为高手,可能看

这本书还不够。

至于看完入门的书之后,就应该看一些高层次的书

To比如vvTheC++ProgrammingLanguage>>

和vvC++Primer>>,同时也可以向STL、MFC、API

等各个方向发展。如果对别的语言感兴趣,还能去看看

C#和Java,它们和C++从语法和很多概念上都是类似

的。

设计原则

・C++设计成静态类型、和C同样高效且可移植的

多用途程序设计语言。

-C++设计成直接的和广泛的支援多种程序设计风

&(程序化程序设计、资料抽象化、面向对象程序设计、

泛型程序设计)。

・C++设计成给程序设计者更多的选择,即使可能

导致程序设计者选择错误。

-C++设计成尽可能与C兼容,籍此提供一个从C

到C++的平滑过渡。

-C++避免平台限定或没有普遍用途的特性。

-C++不使用会带来额外开销的特性。

-C++设计成无需复杂的程序设计环境。

出于保证语言的简洁和运行高效等方面的考虑,

C++的很多特性都是以库(如STL)或其他的形式提供

的,而没有直接添加到语言本身里。关于此类话题,C++

之父的《C++语言的设计和演化》里做了详尽的陈述。

HelloWorld程序

在使用兼容C89标准(也称为ANSIC)的编译器时,下

面这个程序显示“Hello,world!”然后结束运行:

(事实上这并不是符合98标准[ISOC++]的C++程序,

而且在多数编译器上这个程序也不能运行,若要在比较旧

的编译器上编译该程序,应将stdio.h改为iostream.h)

#include<stdio.h>

intmain()

(

printf("Hello,world!\n");

return0;

)

(以上是C语言代码,C++语言是c语言高一级的版本)

在使用兼容C++98标准(ISO/1EC14882-1998)的

编译器时,下面的程序也是可以的:

#include<iostream.h>

intmain()

cout<<"Hello,world!"<<endl;

return0;

在使用兼容C++STL的编译器时,应当是:

#include<iostream>

usingnamespacestd;

intmain()

(

cout<<"Hello,world!"<<endl;

return0;

)

根据ISOC++的规定,main函数的形式只能是

intmain(void)

(

)

以及

intmain(intargc,char*argv[])

(

)

尽管如此,但在VisualC++2003以前的MicrosoftV

isualStudio编译器上,

voidmain()

也被支持,但这并不正确,也不标准。这样的写法会使程

序代码丧失跨平台的特性。每年都有专业人士规定C++

的语法,这也是C++优于其他编程语言的原因之一,由它

衍生的Java已成为通用编程语言中广受欢迎的一种。

代码性能

一般认为,使用Java或C#的开发成本比C++低。

但是,如果你能够充分分析C++和这些语言的差别,会

发现这句话的成立是有条件的。这个条件就是:软件规

模和复杂度都比较小。如果不超过3万行有效代码(不

包括生成器产生的代码),这句话基本上还能成立。否

则,随着代码量和复杂度的增加,C++的优势将会越来

越明显。造成这种差别的就是C++的软件工程性。在

Java和C#大谈软件工程的时候,C++实际上已经悄悄

地将软件工程性提升到一个前所未有的高度。这一点被

多数人忽视,并且被大公司竭力掩盖。

语言在软件工程上的好坏,依赖于语言的抽象能力。

从面向过程到面向对象,语言的抽象能力有了一个质的

飞跃。但在实践中,人们发现面向对象无法解决所有软

件工程中的问题。于是,精英们逐步引入、并拓展泛型

编程,解决更高层次的软件工程问题。(实际上,面向

对象和泛型编程的起源都可以追溯到1967年,但由于

泛型编程更抽象,所以应用远远落后于面向对象)。

应用实例

哪些程序是用C++写的:

主流的3种操作系统Windows内核都是用C语言

和汇编写的,上层高级特性是用C++写的。

《魔兽世界》等几乎所有的网络游戏,百度搜索引

擎,我们所用的大多数软件都是用C++写的(硬件也有

很多用到C++的)。

以下是一些C++的应用:

Amazon:Softwareforlarge-scale

e-commerce

Apple:OSXiswritteninamixoflanguage,

butafewimportantpartsareC++(当然最核心的

部分都是汇编与c语言).

AT&T:ThelargestUStelecommunications

provider.

oprovisioningsystems

osystemsforrapidnetworkrecoveryafter

failure

Autodesk:Alargenumberofmajornumber

ofapplicationintheCADdomain

Ericsson:

oserverplatform.

oTDMA-CDMAHLR

oGSM-TDMA-CDMAmobilitygateway

GoogIe:websearchengine,etc。

HP:HereisatinyfractionofHP'sC++apps:

oC,C++,Fortran90compilers,andlinkerfor

thenewHPIA64platform(theseaddtomore

than1millionlinesofC++code).

IBM:

oOS/400.

oK42:ahighperformance,opensource,

general-purposeoperatingsystemkernelfor

cache-coherentmuniprocessors.

Intel:

oVtuneperformaceanalysissoftware

ocompilersandoptimizers

olotsofchipdesignandmanufacturing

software

JPL(JetPropulsionLab,NASA):Marsrover

autonomousdrivingsystem(incl.sceneanalysis

androuteplanning).C++onMars!Alsolotsof

supportingsoftware"ontheground"(i.e.Earth).

Microsoft:

oWindowsXP

oWindowsNT(NT4and2000)

oWindows9x(95,98,Me)

oMicrosoftOffice(Word,Excel,Access,

PowerPoint,Outlook)

oInternetExplorer(includingOutlook

Express)

oVisualStudio

oSQL

Mozilla:FirefoxbrowserandThunderbird

mailclient(opensource)

MySQL:MySQLServer(about250,000lines

ofC++)andMySQLCluster.Arguablytheworld's

mostpopularopensourcedatabase

Nokia:

oMobileCommunications

radio-station/internetbridges:FlexiGGSN

(GatewayGPRSSupportNode)andFlexiSGSN

(ServerGPRSSupportNode).

oMSC/HLR

Sun:oTheHotSpotJavaVirtualMachineis

writteninC++

SymbianOS:rationale:usingC++for

allsystemcode,fromthekernelupwards."This

isoneofthemostwidespreadOS'sforcellular

phones

KDEfromlinuxiswritteninC++.

telephonesystems:Ithinkitwouldbe

almosteasiertolistthesystemswhicharen't

writteninC++

C++写出的软件,还包括

VLC,著名的开源视频播放器;

LAMMPS,著名分子动力学模拟软件,其中包括一

部分Fortran代码;

编程技巧

使用new和delete进行动态内存分配和释放

运算符new和delete是C++新增的运算符,提供

了存储的动态分配和释放功能。它的作用相当于C语言

的函数malloc()和free(),但是性能更为优越。使

用new较之使用malloc()有以下的儿个优点:

(1)new自动计算要分配类型的大小,不使用sizeof

运算符,比较省事,可以避免错误。

(2)自动地返回正确的指针类型,不用进行强制指

针类型转换。

(3)可以用new对分配的对象进行初始化。

使用例子:

(1)int*p;

p=newint[1O];〃分配一个含有10个整数的整

型数组

delete[]p;〃释放这个指向数组的指针所占内存

(2)int*p;

p=newint(100);//动态分配一个整数并初始化

使用inline内联函数替代宏调用

对于频繁使用的函数,C语言建议使用宏调用代替

函数调用以加快代码执行,减少调用开销。但是宏调用

有许多的弊端,可能引起不期望的副作用。例如宏:

#defineabs(a)(a)<0?(-a):(a)),当使用abs(i++)

时,这个宏就会出错。

所以在C++中应该使用inline内联函数替代宏调

用,这样既可达到宏调用的目的,又避免了宏调用的弊

上山

”而。

使用内联函数只须把inline关键字放在函数返回类

型的前面。例如:

inlineintAdd(inta,intb);〃声明Add()为内联

函数

这样编译器在遇到Add()函数时,就不再进行函数

调用,而是直接嵌入函数代码以加快程序的执行。

使用函数重载

在C语言中,两个函数的名称不能相同,否则会导

致编译错误。而在C++中,函数名相同而参数数据类型

不同的两个函数被解释为重载。例如:

voidPutHz(char*str);〃在当前位置输出汉字

voidPutHz(intx,?inty,?char*str);//在x,y

处输入数字

使用函数重载可以帮助程序员处理更多的复杂问

题,避免了使用诸如intabs()、fabs()>dabs()等繁杂

的函数名称;同时在大型程序中,使函数名易于管理和

使用,而不必绞尽脑汁地去处理函数名。同时必须注意,

参数数据类型相同,但是函数返回类型不同的两个函数

不能重载。

用引用(reference)代替指针进行参数传递

在C语言中,如果一个函数需要修改用作参数的变

量值的时候,参数应该声明为指针类型。例如:

voidAdd(int*a)

(

(*a)++;

)

调用时则使用

Add(&x);//其中x为int或可以转化为int的类型,

如unsignedint,但这时候编译器通常会给出warning

对于复杂的程序,使用指针容易出错,程序也难以

读懂。在C++中,对于上述情况可以使用引用来代替

指针,使程序更加清晰易懂。引用就是对变量取的一个

别名,对引用进行操作,这就相当于对原有变量进行操

作。例如使用引用的函数定义为:

voidAdd(int&a)

(

a++;//a为一个整数的引用

)

调用时使用

Add(x);//其中x为int

这个函数与使用指针的上一个函数的功能是一样

的,然而代码却更为简洁和清晰易懂。

使用缺省参数

在C++中函数可以使用缺省参数,例如:

voidPutHzxy(char*str,intx=-1,inty=-1)

(

if(x==-1)

x=wherex();

if(y==-1)

x=wherex();

moveto(x,y);

PutHx(str);

}

可以有三种方式调用函数PutHzxy(),例如:

PutHzxy("C++语言)//使用缺省参数,在当前位

置输出

PutHzxy("C++语言”,10,10);〃没有使用缺省参

PutHzxy("C++语言”,10);〃对v使用缺省参数,

指定x的位置

通常的情况下,一个函数应该具有尽可能大的灵活

性。使用缺省参数为程序员处理更大的复杂性和灵活性

问题提供了有效的方法,所以在C++的代码中都大量地

使用了缺省参数。

需要说明的是,所有的缺省参数必须出现在不缺省

参数的右边。亦即,一旦开始定义缺省参数,就不可再

说明非缺省的参数。否则当你省略其中一个参数的时候,

编译器无法知道你是自定义了这个参数还是利用了缺省

参数而定义了非缺省的参数。

例如:

voidPutHzxy(char*strjntx=-1,inty=-1)〃正

voidPutHzxy(intx=-1,inty=-1,char*str)〃错

使用STL

STL(StandardTemplateLibrary,标准模板库),

STL的代码从广义上讲分为三类:algorithm(算法)、

container•(容器)和iterator(迭代器),并包括一些

工具类如aut。Dtr。几乎所有的代码都采用了模板类和

模版函数的方式,这相比于传统的由函数和类组成的库

来说提供了更好的代码重用机会。

#include<vector>//包含相关的头文件/

typedefstd::vector<int>intvector;〃使用

typedef使代码看起来更简洁

intmain()

(

intvectorvi;

for(inti=0;i<10,i++)

vi.pushback(i)://使用push_back添加元素

for(inti=0;i<vi.size();i++)

std::coutvvvi[i]vv"";//[]操作符被重载,使得

我们可以像访问数组一样访问vector中的元素

)

开发方式

在unix世界有大量的程序员是传统的非IDE的方

式进行软件开发。一般是如下组合:

1.编译器:gcc,clang等

2.编辑器:一般是vim/emacs

3.make:gnumake或者bsd的pmake等,功

能与用法基本一样

4.版本管理:cvs,svn,git等

5.代码阅读:cscope,ctags,lxr■等

开发环境

1.VisualStudio(VisualC++)

2.BorlandC++Builder

3.Eclipse(Myln+CDT+Mingw32+GCC)

4.Dev-C++(Mingw32+GCC)

5.Code::Blocks(可配合多款编译核心使用)

6.Codelite

7.C-Free

如上所示,目前流行的GNUGCC和微软的Visual

Studio系列各执一套基本的编译链,其他的IDE都是衍

生产品

经典著作

•《TheC++StandardLibrary:ATutorial

andReferenced

中文版:《C++标准程序库:自修教程与参考手册》

百科全书式的C++标准库著作,一本需要一再查阅

的参考大全。本书详细介绍了每一标准库组件的规格和

用法,内容涵盖包括流和本地化在内的整个标准库而不

仅仅是STL。正如本书副标题所示,它首先适合作为教

程阅读,尔后又可用作参考手册。浅显易懂的写作风格

使得这本书非常易读。

•《StandardC++IOStreamsandLocales:

AdvancedProgrammer'sGuideand

Referenced

中文版《标准C++输入输出流与本地化》

•E《ffectiveSTL^

使用STL的程序员必读之作。在这本书中,Scott

讲述了STL容器和算法的工作机制以及如何以最佳方式

使用它们。和Scott的其他作品一样,这本书的写作风

格清晰、精确,具有极佳的可读性。

•影印版《GenericProgrammingandthe

STL:UsingandExtendingtheC++Standard

TemplateLibrary》

中文版《泛型编程与STL»

这本书散发着浓厚的学院气息。AndrewKoenig和

BarbaraMoo在^AcceleratedC++:Practical

ProgrammingbyExampie》一书末尾郑重推荐另

外两本进阶好书(除了他们自己的《Ruminationson

C++》外),其中一本是TCPL,另外一本就是本书。

•DouglasC.Schmidt,StephenD.Huston,

《C++NetworkProgramming》

Volume1:MasteringComplexitywithACE

andPatterns;

Volume2:SystematicReusewithACEand

Frameworks;

中文版:,《C++网络编程》

卷1:运用ACE和模式消除复杂性

卷2:基于ACE和框架的系统化复用

采用C++进行企业级网络编程,ACE(Adaptive

CommunicationsEnvironment)是一个值得考虑的

选择,ACE是一个面向对象、跨平台、开放源码的网络

编程框架,目标在于构建高性能网络应用和中间件。

Douglas是ACE的创始人,Stephen贝已为ACE

提供了数年的技术支持和顾问服务,两位都是ACE社群

(是的,ACE的影响和实际应用的程度已经形成了一个

社群)的专家。

除了使用C++面向对象设计技术和模板等高级语

言特性外,ACE还运用了大量的模式。《C++网络编程》

卷1和卷2并不仅仅教你关于ACE的方方面面,它还会

教给你模式和通用框架设计等高级技术等。

并非所有网络应用都要使用Web服务器(以及其他

应用服务器)和重量级组件模型,换个思路,它们或许

也可以从轻量级的ACE组件中获益。

•BruceEckel,{ThinkinginC++》影印版二版、

三版(又名卷二)

中文《C++编程思想》二版

卷一:标准C++导引

卷二:实用编程技术

《ThinkinginC++》的第1版于1996年荣获“软

件研发”杂志评选的图书震撼大奖。第2版对内容进行了

大幅改写和调整,以反映C++标准化带来的影响以及当

时面向对象领域最新研究和实践成果。

“输入输入流”、“多重继承”、“异常处理”和“运行时

类型识别'等高级主题连同C++标准化以后增加的一些

内容则被放入第二卷中。

事实上,在同类图书中,对于大多数读者而言,这

本书的可读性要超过TCPL和《C++Primer》。

顺带一提,访问作者的站点,你可以先睹第二卷的

风米。

•AndrewKoenig,BarbaraE.Moo,

m/nationsonC++:ADecadeof

ProgrammingInsightandExperienced

中文版《C++沉思录》

一本关于C++编程思想和程序设计技术而非语言

细节的著作。

Bjarne这样评价这本书:本书遍布“C++是什

么?C++能够做什么?”的真知灼见。

•StanleyB.Lippman,影印版《InsideThe

C++ObjectModell

中文版《深度探索C++对象模型》

从编译器的角度观察C++。本书探讨了大量的C++

面向对象程序设计的底层运作机制,包括构造函数、函

数、临时对象、继承、虚拟、模板的实例化、异常处理、

运行期类型识别等,另外还介绍了一些在实现C++对象

模型过程中做出的权衡折衷。

•ErichGamma,RichardHelm,RalphJohnson,

JohnVlissides,《DesignPatterns:Elementsof

ReusableObject-Orientedsoftware^

中文版《设计模式:可复用面向对象软件的基础》

本书并非专为C++程序员而写,但它采用了C++

(以及Smalltalk)作为主要示例语言,C++程序员尤

其易于从中受益。

•JohnLakos,^Large-ScaleC++Software

Design》

中文版《大规模C++程序设计》

•候捷:《STL源码剖析》

《STL源码剖析》是一本很有特色的书。遗憾的是,

侯捷先生在完成化++Templates:TheComplete

Guide》一书的翻译后似乎决定暂时告别模板、泛型编

程和STL领域。

•《TheC++Standard:Incorporating

TechnicalCorrigendumNo.7)

•C++面向对象程序设计{悴者:Wa\terSavitch)

这本书是老外出的书,从基础到深入,很容从C过渡到

C++

•C++Primer中文版(第4版)(一本久负盛名

的C++经典教程)

常见错误

Ambiguousoperatorsneedparentheses

------不明确的运算需要用括号括起

Ambiguoussymbol"xxx"--------------------不明

确的符号

Argumentlistsyntaxerror------------------参

数表语法错误

Arrayboundsmissing----------------------丢失数

组界限符

Arraysizetoolarge--------------------数组尺寸太

Badcharacterinparamenters

----------------参数中有不适当的字符

Badfilenameformatinincludedirective

------------------包含命令中文件名格式不正确

Badifdefdirectivesynatax

----------------------------编译预处理ifdef有语法

Badundefdirectivesyntax

-------------------------编译预处理undef有语法错

Bitfieldtoolarge--------------------位字段太长

Callofnon-function---------------------调用未定

义的函数

Calltofunctionwithnoprototype

--------------调用函数时没有函数的说明

Cannotmodifyaconstobject------------------

不允许修改常量对象

Caseoutsideofswitch--------------------漏掉了

case语句

Casesyntaxerror----------------------Case语法

错误

Codehasnoeffect--------------------代码不可述

不可能执行到

Compoundstatement

missing{-------------------------分程序漏掉”{“

Conflictingtypemodifiers----------------------不

明确的类型说明符

Constantexpressionrequired--------------------

要求常量表达式

Constantoutofrangeincomparison

---------------在比较中常量超出范围

Conversionmaylosesignificantdigits

---------------转换时会丢失意义的数字

Conversionofnearpointernotallowed

---------------不允许转换近指针

Couldnotfindfile"xxx"---------------------------

找不到XXX文件

Declarationmissing;-------------------说明缺少

VI”

*

Declarationsyntaxerror--------------------说明

中出现语法错误

Defaultoutsideofswitch---------------------

Default出现在switch语句之外

Definedirectiveneedsanidentifier

----------------定义编译预处理需要标识符

Divisionbyzero---------------------用零作除数

Dostatementmusthavewhile

---------------------Do-while语句中缺少while部分

Enumsyntaxerror-------------------------枚举类

型语法错误

Enumerationconstantsyntaxerror

---------------枚举常数语法错误

Errordirective:xxx------------------------------错

误的编译预处理命令

Errorwritingoutputfile--------------------------

写输出文件错误

Expressionsyntaxerror

---------------------表达式语法错误

Extraparameterincall-----------------------------

调用时出现多余错误

Filenametoolong--------------------文件名太长

Functioncallmissing---------------------函数调用

缺少右括号

Fuctiondefinitionoutofplace

----------------函数定义位置错误

Fuctionshouldreturnavalue

----------------函数必需返回一个值

Gotostatementmissinglabel

----------------------Goto语句没有标号

Hexadecimaloroctalconstanttoolarge

----------------------16进制或8进制常数太大

Illegalcharacter"x"非法字符

x

Illegalinitialization---------------------非法的初

始化

Illegaloctaldigit---------------------非法的8进

制数字

Illegalpointersubtraction---------------------非

法的指针相减

Illegalstructureoperation---------------------非

法的结构体操作

Illegaluseoffloatingpoint--------------------非

法的浮点运算

Illegaluseofpointer-----------------------指针使

用非法

Improperuseofatypedefsymbol

---------------类型定义符号使用不恰当

In-lineassemblynotallowed--------------------

不允许使用行间汇编

Incompatiblestorageclass--------------------存

储类别不相容

Incompatibletypeconversion

--------------不相容的类型转换

Incorrectnumberformat

---------------------错误的数据格式

Incorrectuseofdefault-------------------------

Default使用不当

Invalidindirection-------------------------无效的

间接运算

Invalidpointeraddition---------------------指针

相加无效

Irreducibleexpressiontree

---------------------无法执行的表达式运算

Lvaluerequired--------------------------------需要

逻辑值0或非0值

Macroargumentsyntaxerror

-----------------宏参数语法错误

Macroexpansiontoolong

--------------------宏的扩展以后太长

Mismatchednumberofparametersin

definition------------------------定义中参数个数不匹

Misplacedbreak-------------------------此处不应

出现break语句

Misplacedcontinue------------------------------止匕

处不应出现continue语句

Misplaceddecimalpoint-------------------------此

处不应出现小数点

Misplacedelifdirective-------------------------不

应编译预处理elif

Misplacedelse---------------------------此处不应出

现else

Misplacedelsedirective----------------------止匕处

不应出现编译预处理else

Misplacedendifdirective------------------------止匕

处不应出现编译预处理endif

Mustbeaddressable---------------------------必须

是可以编址的

Musttakeaddressofmemorylocation

----------------必须存储定位的地址

Nodeclarationforfunction"xxx

-----------------没有函数xxx的说明

Nostack------------------缺少堆栈

Notypeinformation没有类型

信息

Non-portablepointerassignment

------------------不可移动的指针(地址常数)赋值

Non-portablepointercomparison

------------------不可移动的指针(地址常数)比较

Non-portablepointerconversion

--------------------不可移动的指针(地址常数)转

Notavalidexpressionformattype

-------------------不合法的表达式格式

Notanallowedtype-------------------------不允

许使用的类型

Numericconstanttoolarge----------------------

数值常太大

Outofmemory----------------------内存不够用

Parameter"xxx"isneverused

----------------能数xxx没有用到

Pointerrequiredonleftsideof->

---------------------符号。的左边必须是指针

Possibleuseof"xxx"beforedefinition

-----------------在定义之前就使用了xxx(警告)

Possiblyincorrectassignment--------------------

赋值可能不正确

Redeclarationof"xxx"------------------------重复

定义了xxx

Redefinitionof"xxxuisnotidentical

------------------------xxx的两次定义不一致

Registerallocationfailure----------------------寄

存器定址失败

Repeatcountneedsanlvalue

----------------重复计数需要逻辑值

Sizeofstructureorarraynotknown

----------------结构体或数给大小不确定

Statementmissing;----------------------语句后

缺少";"

Structureorunionsyntaxerror-----------------

结构体或联合体语法错误

Structuresizetoolarge-------------------结构体

尺寸太大

Subscriptingmissing]--------------------下标缺

少右方括号

Superfluous&withfunctionorarray

----------------函数或数组中有多余的“&”

Suspiciouspointerconversion

-------------------可疑的指针转换

Symbollimitexceeded-----------------符号超限

Toofewparametersincall--------------------函

数调用时的实参少于函数的参数不

Toomanydefaultcases----------------------

Default太多(switch语句中一个)

Toomanyerrororwa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论