1. 什么叫编程函数他有什么作用c++的结构是怎样的
我下面说的就是函数的定义,如果你不能完全理解的话我建议你先看看下面的C语言结构,不然别人再怎么给你解释你也听不明白:(
在某个变化过程中,有两个变量x、y,如果给定自变量x一个值,那么应变量有且只有一个变量与之对应,那么我们称y是x的函数。
人们对C++有许多不同的看法,保守的C++程序员坚持用其他语言创建COM组件,他们认为只有真正的程序员使用C++。另一方面,VB程序员认为C++是一种很难掌握和使用的语言,没有必要增加编程时间和进行艰难的尝试。Java程序员认为他们比C++程序员强,因为James Gosling(Java的发明者)吸收了许多语言(包括C++ )的优点发明了Java,本章和下一章的目的就是消除对C++的偏见和错误概念。
本章集中介绍用C++ 建立服务器组件,不讲述C++语言,如果想学C++ ,请参阅Ivor.Horton着的《Beginning Visual C++6》,Wrox 出版,书号为ISBN 1-861000-88-X。
本章的主要内容有:
? C++简史。
? 使用C++原因。
? 从VB移植到C++。
? ATL、STL和MFC介绍。
? 建立一个COM组件。
? 错误处理与调试。
更重要的是应该记住,现在,不只是在用C++建立组件,可以使用Visual C++中可用的任何工具,使得建立过程更加容易。先从C++的起源谈起。
17.1 C++语言
在决定是否使用C++语言之前,最好是搞清楚这种语言的实质,让我们看一下C++的历史和现状。
17.1.1 C++简史
刚开始形成的是C语言,那些想建立更快更有效的代码的程序员非常欣赏C语言,有一位名叫Bjarne Stroustrup的人却不满足于仅仅是生产快速代码,他想创建面向对象的C语言编程。他开始对C语言的内核进行必要的修改,使其能满足面向对象模型的要求。C++从此产生。
Bjarne Stroustrup是C++的最初设计者和实现者。它自诞生以来,经过开发和扩充已成一种完全成熟的编程语言。现在C++已由ANSI、BSI、DIN、其他几个国家标准机构和ISO定为标准。ISO标准于1997年11月4日经投票正式通过。
C++标准演变了许多年。C++模板是近几年来对此语言的一种扩展,模板是根据类型参数来产生函数和类的机制,有时也称模板为“参数化的类型”。使用模板,可以设计一个对许多类型的数据进行操作的类,而不需要为每个类型的数据建立一个单独的类。标准模板库(Standard Tempalte Library,STL )和微软的活动模板库(Active Tempalte Library,ATL )都基于这个C++语言扩展。
C++标准可分为两部分, C++语言本身和C++标准库。C++标准库对于Visual C++是相当新的,实际上微软只是在发布Visual C++ 5.0时去除了一些“bug”。标准库提供了标准的输入/输出、字符串、容器(如矢量、列表和映射等)、非数值运算(如排序、搜索和合并等)和对数值计算的支持。应该说, C/C++包含了相对少的关键字,而且很多最有用的函数都来源于库,C++标准库实现容器和算法的部分就是STL。
STL是数据结构和算法的一个框架,数据结构包括矢量、列表和映射等,算法包括这些数据结构的查找、拷贝和排序等。1994年7月,ANSI/ISO C++标准委员会投票决定接受STL为C++标准库的一部分,这个建议是根据Alex Stepanov、Meng Lee和David Musser这三人的编程和软件库研究提出的。STL的产生是为了满足通用性的设计目标,而不是为了提高性能。
那么微软对C++标准的态度怎什么样?微软运行VC++与Plum-Hall C++,想比较得到的分数在92%和93%之间。为什么不是100%的一个原因是跟踪这个标准并同时建立一个编译器比较困难,微软也考虑了对现有编码兼容的重要性,有时他们不得不偏离标准以保持这个兼容性。
17.1.2 使用C++的原因
应该有充分的理由使用C++创建服务器组件,而不只是为了给上司一个好印象才使用C++。如果以前没用过C++,你必须要尽力学习。
1. 性能
性能有个两方面,算法速度和机器代码效率。一个算法可以定义为数据通过系统的概念化的路径,它描述一些点,在这些点上,数据能够被操作并可转换产生某个结果。例如,一个算法定义为获取一个字符串,计算字符串中的字符个数,并作为结果返回的过程。算法与
语言是独立的,所以在编程之前必须设计算法,编写一个快速程序的第一个步骤是设计良好的算法,能以最少的操作步骤得出问题的答案。第二个步是选择语言,这也影响程序的速度。
从性能的角度考虑,用汇编语言编写程序是最佳的选择,它是计算机能理解的自然语言。但是,几乎没有人用汇编语言编写完整的程序,因为这样做极其乏味。另一个最佳的选择是C语言。然而,由VC++提供的所有工具都产生C++,而不是C。使用VC++的向导可以生成大量的使用代码,而不必人工地编写代码。从编写程序的难易程度和程序的性能综合考虑, C++是最佳的选择。
C++性能良好,因为它被编译为机器代码。对于VBScript和Java等语言,代码在运行时由程序解释,而且每次运行程序时都要将代码转换为机器码,这样做效率比较低,不仅仅是已编译过的C++程序运行得较快,而且微软C++编译器已存在多年。这意味着微软的编译器程序员已经把许多优点集中到编译器上,以致于它能产生非常高效的机器码。因为C++是编译语言,而且非常自然,比VB更接近机器代码,所以由C++编译器产生的代码一定比VB的编译代码效率更高。
2. 错误处理
一个好的程序与一个伟大的程序的区别就是其是否具有良好的错误处理支持。实际上,如果在实现中首先进行错误处理,而不是在最后才进行,那么整个程序的开发和测试过程会更加完美。但是,错误处理只能与语言所支持的内容相一致。
VBScript具有基本的错误处理支持功能。在默认情况下,不能捕获VBScript中的错误。每次怀疑产生错误时,要调用On Error Resume Next功能,并检查Error对象。
而C++中的错误处理比较好,这是因为有“异常处理”,本章的后面部分将详细介绍。
3. 最小的依赖性
正如上面所说,C++是一种编译语言,即C++代码在执行之前已转换为机器码。只要此代码不依赖于外部的动态链接库(DLL),C++就可以在不需要安装额外程序的情况下移动到运行同样操作系统的其他机器和微处理器上,而移动Java程序时需要先安装Java运行期库。
4. 利用现有的代码
由于C和C++已经存在许多年了,现在有许多可利用的代码,你的服务器组件可以使用现有的C/C++代码或库。例如统计库和到老系统的C接口。
5. 最大化COM特征
COM与C++很接近,实际上, Don Box(COM的权威)在他的《Essential COM》一书的第一章写道:“COM就是更好的C++”。他说明了COM规范是如何从C++语言规律中产生出来的。通过理解C++,会对COM有更深的理解。
某些语言不能利用所有的COM特征,而在C++中,几乎可以使用所有的COM特征。
17.1.3 不使用C++的原因
知道什么时候使用C++是重要的,同样,知道什么时候不使用C++也是重要的。想象一下那些长期维护代码的人,如果他们中没有一些C++程序员支持C++,那么开发者们不得不把眼光转向另外一些他们熟悉的语言。
改变C++组件时,为了看到这些改变的结果,必须重新编译该组件代码,这会花费很长的开发时间。C++不能像ASP页面代码那样,只使用记事本,改变代码的一行,重新装载而得到结果。因此,如果某些工作需要经常变化(如原型),不要用C++。
在C++中,对一些致命的错误不能获得更多的保护,写一个使组件崩溃的代码是很容易的。这是为了提供快速代码而付出的代价, C++不会停下来去检查代码是否按设计运行能否使程序不崩溃依赖于开发者的技巧。如果在这方面花的时间较少或刚刚学习C++,最好不要使用C++。等到已经意识到C++中所有容易犯的错误,而且在检测组件之前花了许多时间,才可以使用C++,如果想很快、很容易地建立一个组件,而且也不考虑该组件的执行速度,那么使用VB吧!
17.1.4 把ASP技巧转到C++上
学习新东西的最好方法就是利用现有的技巧。对于ASP开发者来说,已经学习了C++所要求的许多技巧,特别是,JScript语法和ActiveX或COM的面向对象编程的概念。
1. JScript
大部分ASP开发者都用JScript在浏览器上使用DHTML。JScript的语法与C非常相似,所以,如果懂得JScript,那么就懂得基本的C语法。当然,只是C++语法的子集。C++有许多额外的语法来支持面向对象编程,这就是我们下一步要做的。
2. 面向对象编程
如果你在VB中使用过类(class),则对任何COM对象和文档对象模型(Document ObjectModel,DOM )都应熟悉,因为已经有了面向对象编程(OOP)的概念。在前面已经说过, C和C++的区别是C++支持面向对象编程。
2. C和VC++,TC到底是怎么回事。还有好多函数在VC上没定义不能使用。 我一直有个问题就是:
这两个语言能一起写吗?可以,但是源文件应该为CPP。
那么在TC下的一些标准函数不能用了,那应该在VC中有相应的函数替代吧?像 "bioskey",头文件中的一些其它?
不一定。首先要分清楚函数的种类,第一、标准C有它自己的标准函数库,主要是数学运算和字符操作等等,这些函数一般的编译器都应该包含和支持。第二、由操作系统提供的函数,包括图形界面函数和系统功能调用函数等等。有这些函数我们才能生成程序的界面和实现各种功能。第三、各个编译器还有它自己特有的函数库,这些函数有些是由操作系统相应的函数封装起来的。比如TC的图形函数库,不属于C标准函数库,VC上就没有,如果控制台程序代码中含有TC的图形函数库里的函数,VC就无法编译成功。但是VC有自己的图形操作函数对应于TC的图形操作函数。标准C不会提供与程序界面有关的函数,因为这些函数必然是与操作系统挂钩的,相同的界面,linux和windows下实现的函数肯定不同。
C是一种面向过程语言,c++可以粗略理解为C的超集,它在C的基础上引入了面向对象思想,还有STL,模板等等很多概念和技术,C++比C复杂了很多很多,C语言你可能一个星期就可以入门,但是C++至少要学一个月。无论是linux和windows平台都可以用C和C++进行程序开发,虽然会比较繁琐。在windows下,C和C++通过使用API函数来开发应用程序。
vc++是一个基于C和C++语言的在windows平台下开发应用程序的编程工具。本质上,它和用C和C++编程没有区别,但是它使得开发应用程序变得简单多了,主要是它对API进行了封装(比如用C语言实现某个功能需要用3个API函数,而vc++把这3个函数封装到一个新的函数里,我们要实现某个功能就只要调用这个新的函数就行了),再加上一大堆类,就形成了MFC(微软基础类库),此外vc++把程序界面设计变得容易了,可以直接通过拖拽来控制控件和界面(用c语言则需要写代码来生成界面,既繁琐,又易出错)。此外,VC++对windows消息处理方式也进行了一些改变,使得消息处理变得简单。一个只有一个窗口,什么功能都没有的程序,如果你采用C来编写,要写几十行代码,包括窗口的生成和消息处理函数。而用VC++,你可以不用写一行代码或很少代码就行了。
对C简单掌握,谭浩强的C语言教程,想继续深入,看《C专家编程》。
对C++简单掌握,推荐白乔的《标准C++开发入门与编程实践》,想系统学C++,推荐先学《C++ Primer》,接着看STL等等很多方面的书。
对vc++,学vc++前一定要知道windows下程序运行原理,包括一些window下程序设计的概念(实例、句柄、一些对象的数据结构等等)、消息处理过程等等,然后自己用C语言和API函数编写一个只有一个窗口的最简单的windows应用程序。书推荐Petzold的《windows程序设计》,想简单学,看前三章就行,否则就推荐把整本书学完。接着就可以看VC++的书了,推荐孙鑫的《VC++深入祥解》,学完,你的VC++就算入门了。
3. 编译器内部使用了哪些技术
编译器是一种将高级语言代码转换为机器语言代码的工具。在编译器内部,使用了许多技术来实现代码的转换和优化。
其中一些常见的技术包括:
词法分析器(Lexer):将源代码转换为一个个标记(Token),并去除无用的空格和注释。
语法分析器(Parser):将标记转换为抽象语法树(AST),并举隐检查语正虚厅法是否正确。
语义分析器(Semantic Analyzer):对AST进行分析,检查变量、函数、类型等是否符合规范,并进行类型检查等操作。
优誉早化器(Optimizer):对生成的机器语言代码进行优化,以提高代码的执行效率和空间利用率。
代码生成器(Code Generator):将优化后的代码生成可执行的机器语言代码。
调试器(Debugger):用于调试生成的代码,可以在代码执行过程中进行断点调试、变量监视等操作。
编译器内部使用这些技术,可以提高代码的执行效率、减少代码出错的概率,并方便程序员进行调试和维护。
码字不易,希望能帮到您! 求采纳...
4. 我在VB的Timet中使用了option显示编译错误,提示子程序或函数未定义怎么回事
如果是编译错误,一些子函数或者函数未定义,那必须要重新整理之后才能使用