C 与VC


http美国队长2://hi.baidu.com/isyangjunyong/blog/item/c27b8c0624ec8b7c02088191.html

C++

 C++语言是一种良好的面向对象程序设计语言,它在C语言的基础上长大而来,但它比C语言更容易为人们进修和掌握。C++以其独特的语言机制在计 算机科学的各个领域中得到了广泛的应用。面向对象的设计思想是在原来结构化程序设计方法基础上的一个质的飞跃,C++完美地体现了面向对象的各种特性。

  l l C++的每一步演化和长大必须是由于实际问题所引起的;

  C++的设计和演化(The Design and Evolution of C++)

  C++程序设计语言是由来自AT&T Bell Laboratories的Bjarne Stroustrup(即本文作者)设计和实现的,它兼具Simula语言在组织与设计方面的特性以及适用于体系程序设计的C语言设施。C++最初的版本 被称作“带类的C(C with classes)”[Stroustrup,1980],在1980年被第一次投入使用;事先它只支持体系程序设计(§3)和数据抽象手艺(§4.1)。 支持面向对象程序设计的语言设施在1983年被加入C++;之后,面向对象设计方法和面向对象程序设计手艺就逐渐进入了C++领域。在1985年,C++ 第一次投入商业市场[Stroustrup,1986][Stroustrup,1986b]。在1987至1989年间,支持范型程序设计的语言设施也 被加进了C++[Ellis,1990][Stroustrup,1991]。

  随着若干独立开发的C++实现产品的出现和广泛应用,正式的C++标准化工作在1990年启动。标准化工作由ANSI(American National Standard Institute)以及后来加入的ISO(International Standards Organization)负责。1998年正式公布了C++语言的国际标准[C++,1998]。在标准化工作进展期间,标准委员会充当了一个重要的角 色,其公布的C++标准之草案在正式标准公布之前,一直被作为过渡标准而存在。而作为标准委员会中的积极分子,我是C++进一步长大工作中的主要参与者。 与以前的C++语言版本相比,标准C++更接近我理想中的那个C++语言了。关于C++的设计和演化,在 [Stroustrup,1994]、[Stroustrup,1996]和[Stroustrup,1997b]中有详细的叙述。至于标准化工作末期产 生的C++语言定义,在[Stroustrup,1997]有详细叙述。

  1 C++的设计目标(C++ Design Aims)

  C++的设计目标,就是要让C++既具有适合于体系程序设计的C语言所具有的可适应性和高效性,又能在其程序组织结构方面具有像Simula那 样的语言设施(Simula所支持的这种程序组织结构通常被称为面向对象程序设计风格)。在设计的时候,还做了很大的尽力,使得引借自Simula的高层 次的程序设计手艺能够应用于体系程序设计之中。这即是说,C++所提供的抽象机制能够被应用于那些对效率和可适应性具有极高要求的程序设计义务之中。

  上述的C++之设计目标可以小结如下:

  [设计目标]

  l l 对于要解决实际问题的程序员而言,C++使程序设计变得更有乐趣;

  l l C++是一门通用目的的程序设计语言,它:

  ——是一个更好的C;

  ——支持数据抽象;

  ——支持面向对象程序设计;

  ——支持范型程序设计。

  对范型程序设计的支持在C++设计的后期才被作为一个明确、独立的目标来实现。而在C++演化过程的大部分时间里,我一直把范型程序设计以及支持它的语言特性划归在“数据抽象”的大标题之下。

  2 C++的设计原则(Design Principles)

  C++的一个目标就是提供更易用并具有一定承受才能的设计思想和程序设计手艺,进一步提高程序的质量。这些手艺中的绝大部分皆源自Simula [Dahl,1970][Dahl,1972][Birtwistle,1979],并通常被作为面向对象程序设计和面向对象设计思想来会商。然 而,C++的设计目标总还是在于要支持一定范围内的各种程序设计风格和设计思想。这与一般在语言设计方面的观点形成一定对比。一般在语言设计上总是试图将 所有体系内建于单独一个被重点支持的、带有强制性的程序设计风格之中(或称典范paradigm)。

  [基本法则(General rules)]

  Bjarne Stroustrup(C++的设计者)对C++的设计和演化的描述

  话说到这里可能更多人关心的是进修VC++需要具备什么条件,为何对于这扇门屡攻不破呢?

  l l 不能无休止的一味追求完美;

  l l 能为意欲支持的每一种程序设计风格提供易于理解的支持方法;

  特注:Microsoft Visual C++并不严格遵循标准C++标准,在很多方面,与标准C++标准相左(不过在VC8、VC9版本中对C++标准的支持还是有很大的提高的)。比如,标准C++规定,过程内的变量生存期仅是该过程。但是,在VC++6.0中,

  l l 总能提供一种变通的方法;

  l l C++在其存在的“事先”那个时期必须是有用处的;

  l l 不强制于人。

  }

  [基于设计的法则(Design-support rules)]

  l l 支持良好的设计方案;

  l l 心口如一(Say what you mean);

  l l 每一种语言特性必须有一个有根据的、明确的实现方案;

  l l 开启一个有用的特性比防止所有的误用更为重要;

  l l 能将独立开发的部件组合成完整的软件。

  在[Stroustrup,1994]中,C++的设计法则被分为基本法则、基于设计的法则、语言的手艺性法则以及基于低层次程序设计的法则四个方面,分列在下文中。

  l l 你不会为你所不使用的部分付出代价(零负荷法则);

  l l 与静态型别体系(Static type system)没有内在的冲突;

  在基于一趟编译(one-pass compilation)的语言中,某些顺序上的依赖性是不可防止的。例如在C++中,一个变量或者函数在其被声明之前是无法使用的。但是,C++中类成 员的名字法则和重载解析(overload resolution)的法则还是在独立于声明顺序的原则下被制定出来,以便将发生紊乱和毛病的可能性降至最低。

  l l 个异化(locality)行为是可取的;

  l l 防止产生顺序上的依赖关系;

  但是,与C的兼容性也使得C++在某些语法和语义上保留了C的一些瑕疵之处。比如,C语言的声明语法就实在远不及优美;而其内建型别的隐式转换 法则也是紊乱无章法的。还有另一个大问题,就是许多从C转向C++的程序员并没有熟悉到,代码质量上的显著提高只能通过在程序设计风格上的显著改变来达 到。

  l l 可以因为不正当的语法使用而产生问题(Syntax matters (often in perverse ways))

  l l 提供用于程序组织的语言设施;

  当然,这些法则要具体结合更多关于基本目标的上下文环境来思索。应该注意到的是,在“与C有较高的兼容性”、“不损掉效率”以及“具有便捷的可 用性来解决实际问题”这三个方面的要求,与在“完整的型别安全性”、“完全的通用性”以及“完善的抽象之美”这三个方面的要求形成对立。

  C++从Simula中借鉴了用户自定义型别(class,§4.1)和类层次机制。但是,在Simula及许多相似的语言中,其对用户自定义 型别的支持与其对内建型别的支持存在着根本上的不同。例如,Simula中不容许在栈中为用户自定义型别的对象分配空间,并且只容许通过指针(这在 Simula中称为引用——reference)来对这些对象进行会见。而相反的,内建型别的对象只在栈中被分配空间,不能在动态存储区中分配,而且不能 使用指针指向它。这种在对待内建型别与对待用户自定义型别上的差异,暗示着对效率问题的严格思索。比如,当作为一个在动态存储区中被分配的对象之引用时, 如果该对象属于自定义型别(比如complex,§4.1),那么就会为运行期及空间带来负荷;而这些负荷在有些应用中被认为是不可接受的。这些正是 C++意欲涉足解决的问题。同时,在用法上的不同也决定了:不可能在范型程序设计中统一对待那些语义上近似的型别。

  在维护一个较复杂的程序时,一个程序员不可防止的会基于某些不完整的知识来对程序作一些修改,只关注全部程序代码中的一小部分。

  基于此,C++提供了class(§4)、namespace(§5.2)和会见控制(§4.1),使设计决策的各别化(locality)成为可能。

  l l 使用传统的(笨拙的)连接器(linker);

  [基于低层次程序设计的法则(Low-level programming support rules)]

  l l 像对内建(built-in)型别一样对用户自定义型别提供很好的支持;

  l l 与C语言不存在无故的不兼容性;

  在C++的设计中只要在不严重影响其对强型别检查(strong type checking)的支持的地方,皆尽量做到与C的“source-link”方式相兼容。除了某些微小的细节差别之外,C++将 C[Kernighan,1978][Kernighan,1988]作为一个子集包含了进来。C++与C的兼容性使得C++程序员马上就能有一个完整的 语言和工具集可用。还有两点也很重要,一是有大量关于C的高质量的教学素材已经存在,二是C++程序员可以哄骗C++与C的兼容性而直接并有效的使用大量 现成的程序库。在决定将C作为C++的基础的时候,C还没有像后来那样出类拔萃、炙手可热,所以在思索这个问题的时候,与C语言所提供的可适应性和高效性 相比,C语言的流行水平只是个次要的思索身分。

  l l 在产生疑惑时,能提供完全自主控制的途径。

  l l 不给C++之下层级的更低层语言留出余地(汇编语言除外);

  l l 在对语言产生疑惑时,可以选取其特性中最易掌握的部分;

  l l 削弱对预处理器的使用。

VC++

       VC++是一个集成开发环境(IDE),C++是一门编程语言。两者是完全不同的两个概念。所有讲C++的书,皆是对C++标准(C99)的解释;而所有 讲VC++的书,皆是讲怎样使用微软的这个IDE(当然包括很多和Windows编程相关的东西,比如Windows API,MFC,如果深邃点,还有DLL,ATL,COM,有些书为了满足没有C++基础的作者,也讲一点C++的内容)。VC++基本遵循C++标准 (其实兼容的比较差,只有70%多,当然不兼容的地方很多程序员用的不多)。进修的话,先学C++语法,可以用VC++来练习;把C++学好了,可以尝试 Windows编程。

  VC++是微软公司开发的一个IDE(集成开发环境),换句话说,就是使用c++的一个开发平台.有些软件就是这个编出来的...另外还有VB,VF.只是使用不同语言...但是,

  vc++是Windows平台上的C++编程环境,进修VC要理解很多Windows平台的特性并且还要掌握MFCATLCOM等的知识,难度比较大。Windows下编程需要理解Windows的消息机制以及回调(callback)函数的原理;MFC是Win32API的包装类,需要理解文档视图类的结构,窗口类的结构,消息流向等等;COM是代码共享的二进制标准,需要掌握其基本原理等等。

  VC作为一个主流的开发平台一直深受编程爱好者的喜爱,但是很多人却对它的入门感到难于上青天,究其原因主要是大家对他毛病的熟悉造成的,严格 的来说VC++不是门语言,虽然它和C++之间有亲切的关系,如果形象点比喻的话,可以把C++看作为一种“工业标准”,而VC++则是某种操作体系平台 下的“厂商标准”,而“厂商标准”是在遵循“工业标准”的条件下扩展而来的。

  VC++应用程序的开发主要有两种形式,一种是WIN API方式,另一种则是MFC方式,传统的WIN API开发方式比较烦琐,而MFC则是对WIN API再次封装,所以MFC相对于WIN API开发更具备效率优势,但为了对WINDOWS开发有一个较为全面细致的熟悉,笔者在这里还是以讲解WIN API的相关内容为主线。

  //......

  要想进修睦VC必须具备良好的C/C++的基础,必要的英语阅读才能也是必不可少的,因为大量的手艺文档多以英文形式公布。

C++的集成开发环境

  1.visual studio(visual C++)

  2.Borland C++

  3.C++ Builder

  4.eclipse(CDT)

  5.Dev-C++

  l l 所有的语言特性必须具有切实有效的承受才能;

  for(int i=0;i<7;i++){

  l l C++是一门语言,而不是一个完整的体系;

  可以注意到,基本法则的最后三条暗示了两点:对适用于真实世界中各种应用的便捷工具的强调;对程序员的手艺和取向(偏好)的充裕思索。从一开 始,C++面向的就是那些要做实际项目的程序员。所谓的“完美”被认为是不可能达到的,这是由于C++用户在需求、背景和待解决问题上存在着太大的不同。 何况,在一门通用目的的程序设计语言的全部生存期之内,连对“完美”一词的诠释皆可能会有极大的改变。由此可知,在语言的演化过程中,来自用户的反应和语 言实现者们积累的经验才是最为重要的。

  这样的语句后,i仍然是认为已经声明过,在VC++8.0及厥后续版本中才更正支持了这一标准。

  完全符合标准C++标准的是BCB(Borland C Builder),GCC等开发环境。

  [语言的手艺性法则(Language-technical rules)]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值