C语言和C#是指同一种语言吗?

Python077

C语言和C#是指同一种语言吗?,第1张

C语言是在B语言的基础上发展起来的,它的根源可以追溯到ALGOL 60。1960年出现的ALGOL 60是一种面向问题的高级语言,它离硬件比较远,不宜用来编写系统程序,1963年英国的剑桥大学推出了CPL(Combined Programming Language)语言。CPL语言在ALGOL 60的基础上接近硬件一些,但规模比较大,难以实现。1967年英国剑桥大学的Matin Richards对CPL语言作了简化,推出了BCPL(Basic Combined Programming Language)语言。1970年美国贝尔实验室的Ken Thompson以BCPL语言为基础,又作了进一步简化,它使得BCPL能挤压在8K内存中运行,这个很简单的而且很接近硬件的语言就是B语言(取BCPL的第一个字母),并用它写了第一个UNIX操作系统,在DEC PDP-7上实现。1971年在PDP-11/20上实现了B语言,并写了UNIX操作系统。但B语言过于简单,功能有限,并且和BCPL都是“无类型”的语言。1972年至1973年间,贝尔实验室的D.M.Ritchie在B语言的基础上设计出了C语言(取BCPL的第二个字母)。C语言既保持了BCPL和B语言的优点(精练,接近硬件),又克服了它们的缺点(过于简单,数据无类型等)。最初的C语言只是为描述和实现UNIX操作系统提供一种工具语言而设计的。1973年,K.Thompson和D.M.Ritchie两人合作把UNIX的90%以上用C改写,即UNIX第5版。原来的UNIX操作系统是1969年由美国的贝尔实验室的K.Thompson和D.M.Ritchie开发成功的,是用汇编语言写的,这样,Unix使分散的计算系统之间的大规模联网以及互联网成为可能。

后来,C语言多次作了改进,但主要还是在贝尔实验室内部使用。直到1975年UNIX第6版公布后,C语言的突出优点才引起人们普遍注意。1977年出现了不依赖于具体机器的C语言编译文本《可移植C语言编译程序》,使C移植到其它机器时所需做的工作大大简化了,这也推动了UNIX操作系统迅速地在各种机器上实现。例如,VAX,AT&T等计算机系统都相继开发了UNIX。随着UNIX的日益广泛使用,C语言也迅速得到推广。C语言和UNIX可以说是一对孪生兄弟,在发展过程中相辅相成。1978年以后,C语言已先后移植到大、中、小、微型机上,如IBM System/370、Honeywell 6000和Interdata 8/32,已独立于UNIX和PDP了。现在C语言已风靡全世界,成为世界上应用最广泛的几种计算机语言之一。

以1978年由美国电话电报公司(AT&T)贝尔实验室正式发表的UNIX第7版中的C编译程序为基础,Brian W.Kernighan(柯尼汉)和Dennis M.Ritchie(里奇)合著了影响深远的名著《The C Programming Language》,常常称它为‘K&R’,也有人称之为‘K&R标准’或‘白皮书’(white book),它成为后来广泛使用的C语言版本的基础,但在‘K&R’中并没有定义一个完整的标准C语言。为此,1983年,美国国家标准化协会(ANSl)X3J11 委员会根据C语言问世以来各种版本对C的发展和扩充,制定了新的标准,称为ANSI C,ANSI C比原来的标准C有了很大的发展:K&R在1988年修改了他们的经典著作《The C Programming Language》,按照ANSI C标准重新写了该书。1987年,ANSI又公布了新标准——87 ANSI C。目前流行的C编译系统都是以它为基础的。当时广泛流行的各种版本C语言编译系统虽然基本部分是相同的,但也有一些不同。在微型机上使用的有Microsoft C(MS C),Borland Turbo C,Quick C和AT&T C等,它们的不同版本又略有差异。到后来的Java、C++、C#都是以C语言为基础发展起来的

************************************************************************

而C#是C#介绍

最近微软宣布了它的最新编程语言C#,这是一种面向对象的编程语言,它将作为Visual Studio中的一部分推出。C#(发音为“C-Sharp”)既保持了C++中熟悉的语法,并且还包含了大量的高效代码和面向对象特性。据微软产品经理透露,C#语言将在保持C/C++灵活性的基础上为程序员带来更高效的RAD开发方式。它不仅能用于WEB服务程序的开发,并且还能开发强大的系统级程序。

微软还没有正式宣布这一新语言技术,该技术将以测试形式出现在微软打算在7月中旬在专业开发会议上分发的Visual Studio 7中。Visual Studio 7将于明年某个时候正式发售。

Layman介绍说C#包含使XML编程更为轻松的技术。微软将使它的下一代工具软件、操作系统和应用支持XML技术。

新的编程语言还将包含虚拟机设备。微软官员已经公开表示C#技术和该公司去年开发的 Java竞争技术Cool没有关联。微软官员拒绝回答是否计划在Visual Studio 7中提供微软设计的视窗版Java Visual J++的某个版本。

C#的特性

现在,微软仍在一边继续反驳其竞争对手Sun控告它改变了Java语言的诉讼,一边在对美国反垄断指控顽抗到底,但与此同时,微软的天才程序员们也在技术上进行着一场补救的措施。那就是他们已经开发出来的C#语言,这是一种非常类似于Java的语言,微软深知即便是微软阵营中也有着相当一部分人喜欢Java语言,所以这次干脆就用C#来满足他们的愿望,这是一种非常完美的语言,适用于各种操作系统,并且与Windows紧密地结合在一起。

微软表示这种新的程序设计语言并不针对Java,但它将是C++的革新。而这正是Java所追求的两个主要目标之一(另一目标当然就是可移植性)。微软一直梦想着能开发出能与Java在Windows NT系统上抗衡的语言。C#的自动内存管理以及和Java一样都使用的C语言语法,似乎让这个理想成为现实。

微软称C#是由C和C++派生而来的一种“简单、流行、面向对象、类型安全”的程序设计语言,C#意在综合Visual Basic的高效率和C++的强大功能。但这种说法是否准确呢?由于C#的结构很像Visual Basic的ActiveX,它显然是冲着RAD开发者来的。但同时,“C#提供了C++的强大功能”这种说法也稍嫌夸张,将来很可能变成空头支票。

对某一对象接口的更新,微软称之为“继承”,当然“继承”是就“对象”而言的。但是,虽然“对象”这个词我们经常碰到,却很少有人真正理解了它的含义。微软的用户,甚至它自己的员工都经常把“对象”和“接口”弄混。所以微软干脆就用接口来定义各种对象,结果导致了“面向对象编程”(OOP)被微软弄得乱七八糟。现在,微软又在大踏步地前进了(虽然它内心还是很小心),它把它建立在接口基础上的“对象”集成到了开发工具里。不过它走得实在过了头,它甚至把对另一对象接口的更新称之为“继承”。

这个“继承”给程序员们带来的好处就是语言无关——只要接口维持其兼容性,用Visual Basic写成的对象在C#和C++中也可以良好地运行。但此特性是以真正的OOP技术和平台的可移植性为代价的。每个对象都被编译和注册到Windows子系统,只要你能访问这个子系统,你就能访问这个对象。来吧!欢迎来到.NET和NGWS的世界!——Windows平台从来没有完完全全地让人产生这样完整的依赖性。他们的动机当然要遭到全世界对微软有偏见的人的怀疑,当然,完全依靠此技术的C#也不例外。

事实上,C#将是完全依靠Windows的最完美的产物。那些困绕Java SDK, MFC 和SET的数据库已成为过去。你想放入C#的任何东西(无论何种语言),只要在Windows的.NET子系统下建立和包装的都可以使用Windows的运行库。

用MSIL进入.NET

当人们访问Usenet或一些新闻组时,会有一些诸如新语言和平台有效性之类的问题。什么时间和努力能解决这些问题呢?当然,如没有牢固的事实和有说服力的证据,即使是最有帮助的响应者,权威机构也会对他的断言持保留意见。我没有参加今年的专业开发者会议(PDC),因此我的发现都是基于那些与会者的反馈。

人们对微软过去几周的大肆宣传,最基本的错误理解就是C#只是Visual C++的改进版本。完全不是这么回事。C#和Java没有直接联系。它的特征设定是从Java获得的灵感。它的语法同Java一样,源自C和C++,但它的执行是完全新的,只依靠.NET结构。

C#也并非字节码(bytecode)。微软一位员工罗伯特.舒密特详细描述道:“C#编译程序产生的是‘微软中间语言’(MSIL)……但虚拟机或其他类似的技术则不能用于解释这种中间语言(IL)。相反地,每当应用程序载入或JIT编译程序需要编译它时,IL就会被转换成本地代码。一旦这种转换完成,可以执行的代码实际上是本地代码。”实质上,虽然这种方案有点像Java程序通过一个JIL编译程序,但这里最终的JIT编译是100%的本地代码,而Java的JIT产生的结果是不同的。

C#的弱点

这个方案也暴露了微软对C#和.NET介绍中的一些有趣的漏洞。MSIL是.NET提供的一个新特性,允许很流行的程序设计语言编译到一个单独的公用语言。(.NET支持的语言种类是相当惊人的)。这些语言都要服从一种叫“通用语言规范(CLS)”的构架。微软称之为“CLS兼容语言和类库之间可互操作的通用语言”。

编译所有的语言到一个单一的公用语言上,能让“继承”通过多重语言真正执行。这轻而易举的扫除了C#可能遇到的错误概念。.NET组件使用COM的IDispatch,它只允许接口执行。它比先前C#被评定为一种OOP语言的看法容易接受得多。它在程序设计上或许像Java一样是面向对象的。

但不幸的是CLS这种包括MSIL的共享语言基础,只让RAD开发者受益,而损害了硬件的核心开发者,有人认为创造一种新程序设计语言的目的就是有能力充分运用它和服务于可微调的执行能力,这一点在CLS世界里是做不到的。老实说,加速充分利用从来不是许多语言的唯一目标。许多语言的唯一目标(最瞩目的是像Visual Basic和Java的RAD语言)是加速和美化开发和展开能力,而不仅仅是运行时刻的速度。

舒密特文章中所提到的确实包含了相关和值得注意的评论:你可以用C++指定.NET,并在你的代码中运用所有C++特性。同时,因为.NET在运行时刻不能检验C++代码是否安全,此语言并不遵从CLS规范,里面所书写的程序也受到限制。作为应对,微软往Visual C++里添加非标准管理的扩展。用这些扩展写的代码能符合CLS规范。

C#将把微软领向何方就一目了然了。因为所有项目编写会只依靠MSIL和CLS JIT编译程序。这样C#或任何MSIL前端语言比Java任何时候都快。但很不幸,程序设计和编译程序级的优化不能在非微软的平台上充分利用,想在非Windows平台上展开.NET,再充分运用它们也是不现实的。

JAVA是C#的竞争对手

尽管.NET是微软一手缔造的,它并不是只能在Windows上使用。微软准备尽力为那些COM对象提供传统帮助(所有的OLE, ActiveX等等在下一代Viual Studio推出后,都将成为一个legacy平台)。但.NET不会围绕COM建造。新平台无疑将补充COM,并与它几乎天衣无缝地配合,但一点也不会依靠COM。这表明这种结构本身能够Macintosh, UNIX. BeOX展开。这样命名,是因为除了CLS构架是平台独立的,C#将用到的和所有遵从CLS的数据库也是平台独立的。也就是说,它们都是遵从CLS的,如果一个本机MSIL编译程序在平台上有效,那么它们能在运行时刻为任何结构进行编译。微软也积极争取被ECMA标准接纳,他们先前的Javascript已被接纳。 当Visual Studio. NET推出时,开发团体肯定会有不同的反应。"微软又开发了一个新平台",这已吓倒那些本来对微软平台统治忧心忡忡的人了。然而更重要的是C#或.NET战略不会对原始C++构成太大威胁,那么有理由推论C#和.NET将是Java的有力竞争者。考虑相反方面:Java VM靠翻译字节码来运行应用程序。CLS在运行时刻本机编译。Java平台只支持Java语言。.NET只支持MSIL,但一些无限制的高级语言如C#,Visual Basic,甚至Eiffel和COBOL都能启动MSIL。Java运用执行转接提供真正的OOP技术。MSIL,C#也是如此。在Java平台,简单地移动平级文件,项目就可以展开为产品目录。据说,.NET平台的项目也可轻松展开而不像以registry-happy Com为基础的项目。或许Java平台真正的优势只在于政治上的正确性--它不是微软搞出来的,且目前有成千上万的执着的宗教追随者。

汇编语言是一种符号语言,我们编写的程序最终都会编译成01代码的形式,而汇编语言,你可以看成是把这些01代码做了一个十分简单的加工,他的每一条指令都可以用多为01组合去代替,因此是编译效率最高的语言,而且程序员通过汇编语言直接操作的是计算机的内存和编译器,是很底层的一门编程语言。

C语言和java语言都是高级语言,传统意义的C语言是面向过程的编程语言,它的执行效率很高,大概只比汇编低20%,但是比汇编要简单的多,通过很少的代码量就能实现汇编语言的功能,他的精髓,也是内存操作。

而java语言是面向对象的编程语言,引入了类和对象的概念,这并不是语法和语言的革新,而是一种编程思想的革新。在此基础上,java语言屏蔽了程序员对内存方面的操作,转而由编译器代替程序员进行内存的分配和回收,极大的降低了编程难度,这是java和C语言之间最大的区别。但是执行效率比C要低很多,而且系统很多资源C语言可以访问,而java不能。

总结一下就是,汇编,C语言,java语言这三门语言后者比前者容易上手,开发更简洁。但是前者比后者编译效率高,而且访问的权限大。

C语言是结构化和模块化的面向过程的语言,C++语言是面向对象的程序设计语言。C++语言是C语言的超集,也就是说学会了C++,你其实已经把C语言学会了。至于说有什么区别,应该说是编程思想的区别吧,C是基于过程的,强调的是程序的功能,以函数(功能)为中心。C++是面向对象的,强调程序的分层、分类,以抽象为基础,进行对象的定义与展示,即程序设计。具体说来话长。建议你学习C++的时候,学会用面向对象的方式思考和编程。现在在开发大项目的时候,都是应用面向对象的分析和设计的技术。

C和C++的区别有什么

今天在网易上看到有人问C和C++的区别有什么,在这里简略说点.

其他的东西都不需要多说,就象类,继承,引用等,大家都知道.

这里讲的是调用编译的区别.大家看WIN32 SDK的头文件,总是可以看到

ifdef __cplusplus

extern "C"

endif

ifdef __cplusplus

endif

这个就是直接能够体现实际编程时区别的地方. 在WIN系列下.所有的WIN32 SDK提供的LIB都是以C的形式存在的.当然,C和C++同样都支持C,STDCALL,FASTCALL调用.为什么系统提供C编译器编译的LIB而不是C++编译的LIB呢?这里其实就是C和C++编译器不同的地方.

所有的函数名称只有在汇编编译器下才最清楚.因为经汇编编译器编译的函数不经过任何修饰.

C 的编译器编译出来的函数名称如果在汇编编译器看来一个C调用将在函数名前家下划线('_').而一个STDCALL的函数将是_FUNC@NUMBER的形式.如FUNC(void)经过编译器后成为_FUNC@0.一个FASTCALL调用的函数被编译成@FUNC@0.顺便提一下.在WIN32的编译器里不再需要PASCALL调用.VC6已经取消了对PASCALL的支持.

光看C的编译还不够,看一下C++编译器是怎么干的.在缺省情况下.一个C++的函数经过C++编译器后编译出的函数名包括函数名,所属的类,参数类型,调用约定,返回类型.而且更要命的是这么多的信息,只有函数名和类名在编译后还依稀可见.其他就是一长串的ABCD字母,根本就是无法辨认其意义的.我们在VC手册里可以看到

一个例子:

void __stdcall b::c(float)----------->?c@b@@QAGXM@Z

一个函数被编译得连名字也不知道怎么样了.这么一来.如果SDK提供的是C++编译器提供了LIB.那么可以说就无法编译任何一个完整的WIN程序.更加不用说什么混合语言编程.

现在,VC编译器提供了个extern语句.当出现extern 'C'语句,括号里的函数将以C方式经过编译器.从而使提供库程序方便那么点.

C语言与C++的区别有很多:

1,全新的程序程序思维,C语言是面向过程的,而C++是面向对象的。

2,C语言有标准的函数库,它们松散的,只是把功能相同的函数放在一个头文件中;而C++对于大多数的函数都是有集成的很紧密,特别是C语言中没有的C++中的API是对Window系统的大多数API有机的组合,是一个集体。但你也可能单独调用API。

3,特别是C++中的图形处理,它和语言的图形有很大的区别。C语言中的图形处理函数基本上是不能用在中C++中的。C语言标准中不包括图形处理。

4,C和C++中都有结构的概念,但是在C语言中结构只有成员变量,而没成员方法,而在C++中结构中,它可以有自己的成员变量和成员函数。但是在C语言中结构的成员是公共的,什么想访问它的都可以访问;而在VC++中它没有加限定符的为私有的。

4,C语言可以写很多方面的程序,但是C++可以写得更多更好,C++可以写基于DOSr程序,写DLL,写控件,写系统。

5,C语言对程序的文件的组织是松散的,几乎是全要程序处理;而c++对文件的组织是以工程,各文件分类明确。

6,C++中的IDE很智能,和VB一样,有的功能可能比VB还强。

7,C++对可以自动生成你想要的程序结构使你可以省了很多时间。有很多可用的工具如加入MFC中的类的时候,加入变量的时候等等。

8,C++中的附加工具也有很多,可以进行系统的分析,可以查看API;可以查看控件。

9,调试功能强大,并且方法多样。