pascal 语言或者说类pascal 语言 和 c或者类c有什么区别没??

作者&投稿:贾涛 (若有异议请与网页底部的电邮联系)
C语言与PASCAL语言有什么区别~

C 和 Pascal 曾经不太像,但是越来越像。

现代 C 语言借鉴了很多 Pascal 的概念:
例如,古老的 C 语言的类型检查很弱,没有函数原型。但今天的 C/C++ 语言支持函数原型(而且不提倡用旧的函数风格),类型检查机制几乎和 Pascal 一样严格。古老的 C 语言曾经只能靠指针存取外界的变量,很不安全,但今天 C/C++ 的引用参数则是相当类型安全的。而引用参数和 Pascal 的 var 参数如出一辙。

另外,Pascal 语言本身也经过了巨大的发展,Borland 功不可没。
今天人们用的 Pascal 几乎就是 Turbo Pascal 或 Delphi 的 Object Pascal。N.Wirth 时代的

program Name(input, output);
const a = 1;
type t = packed array of char;
var i: integer;
begin
writeln('这是一个古董Pascal程序');
end.

还有几个人认识?一个软件就是一个 program begin end,不能分模块,岂不要疯掉?
现代 Pascal 语言也借鉴了许多 C 语言的概念,如缺省参数值、无变量变体记录:

type
TPoint = record
case integer of
0: ( x, y: extended );
1: ( radius, angle: extended );
end;

case 部分不是 case type: integer of 而是 case integer of,实际上跟 C 语言的 union 一样了。
至于借鉴的数据类型(如 smallint, longint, 无类型指针 Pointer,类型参数)和强制类型转换机制,就更不用提了。
今天 Pascal 的文件处理,也有点模仿 C 语言,跟以前是天壤之别,谁还记得 Old Pascal 的 get/put 操作?

说这么多相似,其实也衬托了当年的不相似。语言的发展趋同,不同的( {} 与 begin..end )往往都是鸡毛蒜皮。

今天还有的比较重要的区别:

1. Pascal 支持子程序嵌套,C 否。因为 C 的设计目标之一就是与机器语言的结构直接对应。
2. Pascal 子程序分过程/函数,C 只有函数。
3. Pascal 类型更严格,如 char, boolean 都是特殊的枚举类型,而枚举与整型不是一回事,必须用 Ord() 转换。
而 C 的 char、enum 都被当作整型。
4. C 支持可变参数 void f(int x, ...),Pascal 没有。
5. C/C++ 的模块机制是头文件的文件包含+*.obj文件的连接,文件包含属于文本操作,编译速度很慢。而 Pascal 是 unit 的连接,二进制操作,编译速度飞快(对开发大型软件还是很重要的)
6. C 语言的结构/数组的初始化只用给出数值,而且元素个数可以比定义的少;而Pascal必须明确指出分量名称,个数严格对应:
var Point: TPoint = ( x: 100, y: 200 );
7. C 的标志符大小写敏感,Pascal 否。
8. C 编译预处理功能比 Pascal 的强大,实践中也很重要(它弥补了 C 编译器的许多不足)。
9. 很容易被忽视也很重要的一条:两者的表达式不同。
9.1. C/C++ 的表达式被赋予了太多的使命,连赋值语句本身也是表达式,a = b 同时返回 a,因此可以写 a = b = c; 而 Pascal 对赋值号被严格当作一个规定好的操作:赋值,别无其它,你不能写 a := b := c。
9.2. C/C++ 的表达式的类型严格取决于源操作数: char a = 100, b = 200; 则 a+b 的结果类型仍然是 char,当然就会溢出。Pascal 会“体贴”地替你扩展成足够大的数据类型:

var a, b: smallint; c:longint;

a := 32768;
b := 32768;
c := a + b; //结果是 65536,在 C 语言中则肯定是 0

归根结蒂,C 贴近机器,骨子里把操作数当作“二进制”处理(这有时是优点,尤其是跟硬件打交道时);Pascal 贴近数学,尽量以数学的视角看待数值。
10. 至于 C 的 for 循环如何强大,Pascal 的 for 循环如何循规蹈矩,这些都不是太重要。

========================================================

我认为最大的区别在于c中的函数内部不允许定义其他函数
但是pascal的过程 函数中允许存在
另外赋值 c用=pascal用:=
还有就是c用{}表示作用域 但是pascal用begin end
关于for循环c可以随意给条件中的变量进行增加和减少如
int i;
for(i=0;i<100;i+=2)
{
}
但是pascal中每次只能增加1(不知道这一点是不是正确,可能跟vb搞在一起了 你就参考一下吧)

=========================================================

从oop来说他们还有些区别。

1. pascal不支持多重继承,只能由单一的父亲,而c++允许多父亲。
如果大家用果BC提供的TV编程,那么一定看过TV的源代码,你会发现他和delphi的vcl多么类似,但是他毕竟是c++写的,采用了很多多重继承,delphi后来重新写了她。
从oop的未来发展来看,并不提倡多重继承,java类似pascal也不支持这样操作,这从根本上降低了类的复杂度和可读性。

2.pascal原来没有重载、多态这些该概念,现在的borland把pascal完善的已经脱胎换骨了。

3.pascal至今仍没有c++的友元。他所谓能做到的只是可以访问同一个unit的其他类的私有变量。现在的编程中,大家应该尽量避免使用友元了。

4.pascal的所有类都是TObject的子孙,实际你什么都不写
aaa= class();
end;
仍然等效与
aaa= class(TObject);
end;
这样所有的类指针都能用TObject来转换,而且他在TObject里面已经做到了一些基本的类的初始化、析构和操作符重载。这是c++的不及。

5. 所有的pascal 必须显式声明构造函数,即使你里面什么也不写。而c++可以没有。

6. pascal所有的类都是在堆中申请,统一管理,各个类的互相操作都在堆里面进行。
而c++却可以在堆、栈和数据区里面存在,这样各个不同区域的类相互访问,成了c++需要解决的一个复杂问题。

7. 基于上面的原因。
比如一个类 TDemo,
再C++ 里面可以写成
TDemo *demo= new TDemo();
TDemo demo; // 直接创建实体
但是在pascal里面就必须写成
Demo: TDemo;
Demo:= TDemo.Create();

8.还有个问题,就是字符串。
现在可以说pascal的字符串操作性比c++要强大。
他可以直接的+,而c++却不行,这得主要原因是c++太接近底层操作了。

9.还是字符串
pascal的字符串 分为长字符串和短字符串,他们的开始string[0],这个[0]里面实际保存的是字符串的长度,长字符串是4个字节,表示4G长度的字符串,短的1个字节,最多长度255,而不像c++是结为\0表示结束。
pascal这样的好处很多,比如你想得到一个字符串的长度,c++需要扫描整个字符串,直到遇到\0才能统计出来大小,而pascal直接读[0]就行了,这个效率你可以从编译后产生的汇编代码来看。
还有一个好处就是对于多字节字符串支持,比如unicode,由于是16bit的,里面会出现很多\0,这就与c++的字符窜的结束符号冲突,c++为了解决不得不变成\0\0来表示结束。而pascal却不用任何变化。

10......还有好多,我一时想不起来了

pascal是一门非常严谨的结构化程序设计语言,一般来说计算机软件专业的教学结构化编程标准课程,但属于比较老旧而实用程度较低。
C也是一门结构化程序设计语言,相比PASCAL它是更加灵活而且实用。C更加流行,它是程序员操控方便的更加接近接口和设备语言,优点是高效,简洁。
现在面向对象编和JAVA,C++,C#之类的面向对象语言,多是和C相似,有了C基础学这些语言会更加轻松自如。
至于学C之前要学PASCAL没有科学依据,大学工科专业一般第一门程序语言就是C,不必要有PASCAL作为铺垫。

C 和 Pascal 曾经不太像,但是越来越像。 现代 C 语言借鉴了很多 Pascal 的概念: 例如,古老的 C 语言的类型检查很弱,没有函数原型。但今天的 C/C++ 语言支持函数原型(而且不提倡用旧的函数风格),类型检查机制几乎和 Pascal 一样严格。古老的 C 语言曾经只能靠指针存取外界的变量,很不安全,但今天 C/C++ 的引用参数则是相当类型安全的。而引用参数和 Pascal 的 var 参数如出一辙。 另外,Pascal 语言本身也经过了巨大的发展,Borland 功不可没。 今天人们用的 Pascal 几乎就是 Turbo Pascal 或 Delphi 的 Object Pascal。N.Wirth 时代的 program Name(input, output); const a = 1; type t = packed array of char; var i: integer; begin writeln('这是一个古董Pascal程序'); end. 还有几个人认识?一个软件就是一个 program begin end,不能分模块,岂不要疯掉? 现代 Pascal 语言也借鉴了许多 C 语言的概念,如缺省参数值、无变量变体记录: type TPoint = record case integer of 0: ( x, y: extended ); 1: ( radius, angle: extended ); end; case 部分不是 case type: integer of 而是 case integer of,实际上跟 C 语言的 union 一样了。 至于借鉴的数据类型(如 smallint, longint, 无类型指针 Pointer,类型参数)和强制类型转换机制,就更不用提了。 今天 Pascal 的文件处理,也有点模仿 C 语言,跟以前是天壤之别,谁还记得 Old Pascal 的 get/put 操作? 说这么多相似,其实也衬托了当年的不相似。语言的发展趋同,不同的( {} 与 begin..end )往往都是鸡毛蒜皮。 今天还有的比较重要的区别: 1. Pascal 支持子程序嵌套,C 否。因为 C 的设计目标之一就是与机器语言的结构直接对应。 2. Pascal 子程序分过程/函数,C 只有函数。 3. Pascal 类型更严格,如 char, boolean 都是特殊的枚举类型,而枚举与整型不是一回事,必须用 Ord() 转换。 而 C 的 char、enum 都被当作整型。 4. C 支持可变参数 void f(int x, ...),Pascal 没有。 5. C/C++ 的模块机制是头文件的文件包含+*.obj文件的连接,文件包含属于文本操作,编译速度很慢。而 Pascal 是 unit 的连接,二进制操作,编译速度飞快(对开发大型软件还是很重要的) 6. C 语言的结构/数组的初始化只用给出数值,而且元素个数可以比定义的少;而Pascal必须明确指出分量名称,个数严格对应: var Point: TPoint = ( x: 100, y: 200 ); 7. C 的标志符大小写敏感,Pascal 否。 8. C 编译预处理功能比 Pascal 的强大,实践中也很重要(它弥补了 C 编译器的许多不足)。 9. 很容易被忽视也很重要的一条:两者的表达式不同。 9.1. C/C++ 的表达式被赋予了太多的使命,连赋值语句本身也是表达式,a = b 同时返回 a,因此可以写 a = b = c; 而 Pascal 对赋值号被严格当作一个规定好的操作:赋值,别无其它,你不能写 a := b := c。 9.2. C/C++ 的表达式的类型严格取决于源操作数: char a = 100, b = 200; 则 a+b 的结果类型仍然是 char,当然就会溢出。Pascal 会“体贴”地替你扩展成足够大的数据类型: var a, b: smallint; c:longint; a := 32768; b := 32768; c := a + b; //结果是 65536,在 C 语言中则肯定是 0 归根结蒂,C 贴近机器,骨子里把操作数当作“二进制”处理(这有时是优点,尤其是跟硬件打交道时);Pascal 贴近数学,尽量以数学的视角看待数值。 10. 至于 C 的 for 循环如何强大,Pascal 的 for 循环如何循规蹈矩,这些都不是太重要。 ======================================================== 我认为最大的区别在于c中的函数内部不允许定义其他函数 但是pascal的过程 函数中允许存在 另外赋值 c用=pascal用:= 还有就是c用{}表示作用域 但是pascal用begin end 关于for循环c可以随意给条件中的变量进行增加和减少如 int i; for(i=0;i<100;i+=2) { } 但是pascal中每次只能增加1(不知道这一点是不是正确,可能跟vb搞在一起了 你就参考一下吧) ========================================================= 从oop来说他们还有些区别。 1. pascal不支持多重继承,只能由单一的父亲,而c++允许多父亲。 如果大家用果BC提供的TV编程,那么一定看过TV的源代码,你会发现他和delphi的vcl多么类似,但是他毕竟是c++写的,采用了很多多重继承,delphi后来重新写了她。 从oop的未来发展来看,并不提倡多重继承,java类似pascal也不支持这样操作,这从根本上降低了类的复杂度和可读性。 2.pascal原来没有重载、多态这些该概念,现在的borland把pascal完善的已经脱胎换骨了。 3.pascal至今仍没有c++的友元。他所谓能做到的只是可以访问同一个unit的其他类的私有变量。现在的编程中,大家应该尽量避免使用友元了。 4.pascal的所有类都是TObject的子孙,实际你什么都不写 aaa= class(); end; 仍然等效与 aaa= class(TObject); end; 这样所有的类指针都能用TObject来转换,而且他在TObject里面已经做到了一些基本的类的初始化、析构和操作符重载。这是c++的不及。 5. 所有的pascal 必须显式声明构造函数,即使你里面什么也不写。而c++可以没有。 6. pascal所有的类都是在堆中申请,统一管理,各个类的互相操作都在堆里面进行。 而c++却可以在堆、栈和数据区里面存在,这样各个不同区域的类相互访问,成了c++需要解决的一个复杂问题。 7. 基于上面的原因。 比如一个类 TDemo, 再C++ 里面可以写成 TDemo *demo= new TDemo(); TDemo demo; // 直接创建实体 但是在pascal里面就必须写成 Demo: TDemo; Demo:= TDemo.Create(); 8.还有个问题,就是字符串。 现在可以说pascal的字符串操作性比c++要强大。 他可以直接的+,而c++却不行,这得主要原因是c++太接近底层操作了。 9.还是字符串 pascal的字符串 分为长字符串和短字符串,他们的开始string[0],这个[0]里面实际保存的是字符串的长度,长字符串是4个字节,表示4G长度的字符串,短的1个字节,最多长度255,而不像c++是结为\0表示结束。 pascal这样的好处很多,比如你想得到一个字符串的长度,c++需要扫描整个字符串,直到遇到\0才能统计出来大小,而pascal直接读[0]就行了,这个效率你可以从编译后产生的汇编代码来看。 还有一个好处就是对于多字节字符串支持,比如unicode,由于是16bit的,里面会出现很多\0,这就与c++的字符窜的结束符号冲突,c++为了解决不得不变成\0\0来表示结束。而pascal却不用任何变化。 10......还有好多,我一时想不起来了参考资料: http://topic.csdn.net/t/20020825/20/969060.html

当然有,无论从语法上,还是功能上都有,不过现实上……C的应用发威比PASCAL大得多,假如要学推荐你想学PASCAL,再学C


白玉县13090615911: 类PASAC语言是什么语言? -
繁淑芪归: Pascal语言是由Nicolas Wirth在七十年代早期设计的,因为他对于FORTRAN和COBOL没有强制训练学生的结构化编程感到很失望,“空心粉式代码”变成了规范,而当时的语言又不反对它.Pascal被设计来强行使用结构化编程.最初的Pascal...

白玉县13090615911: pascal与类pascal的对比 -
繁淑芪归: 1968年瑞士的N.WIRTH教授设计完成了Pascal语言,1971年正式发表. 1975年,国际标准化组织(ISO)对Pascal语言进行了修改,从而形成了标准Pascal语言 类pascal一般用来教学,比如学编译原理等

白玉县13090615911: pascal 语言或者说类pascal 语言 和 c或者类c有什么区别没?? -
繁淑芪归: C 和 Pascal 曾经不太像,但是越来越像. 现代 C 语言借鉴了很多 Pascal 的概念: 例如,古老的 C 语言的类型检查很弱,没有函数原型.但今天的 C/C++ 语言支持函数原型(而且不提倡用旧的函数风格),类型检查机制几乎和 Pascal 一样严...

白玉县13090615911: Pascal语言是什么 -
繁淑芪归: Pascal是一种计算机通用的高级程序设计语言.Pascal的取名是为了纪念十七世纪法国著名哲学家和数学家Blaise Pascal.它由瑞士Niklaus Wirth教授于六十年代末设计并创立.Pascal语言语法严谨,层次分明,程序易写,具有很强的可读性,是第一个结构化的编程语言.

白玉县13090615911: Pascal 语言是什么 -
繁淑芪归: Pascal语言概述与预备知识 1 关于Turbo PascalPascal是一种计算机通用的高级程序设计语言.它由瑞士Niklaus Wirth教授于六十年代末设计并创立.以法国数学家命名的Pascal语言现已成为使用最广泛的基于DOS的语言之一,其主要特点有...

白玉县13090615911: Pascal语言是用做什么的 -
繁淑芪归: Pascal是通用程序设计语言,可以干各种事.Pascal在对面向过程的结构化编程风格支持得非常好.目前主要用于教学,直接的实用很少.不过大名鼎鼎的专业科技排版软件TeX就是由Knuth教授用Pascal写的,这个大概是Pascal写出来的最出名,应用也最广泛的软件.另外,Borland公司的Delphi就是以Pascal为基础的一个面向对象的语言及开发工具.这个功能比较强大,Windows下多种应用软件都是用它做的.可惜现在Borland把Delphi卖了,用Delphi的人也少了.

白玉县13090615911: Pascal语言程序设计是什么啊! -
繁淑芪归: 的确,这种语言非常棒,易学,而且功能非常强大,pascal语言的开发平台(IDE)代表是borland公司的delphi,从delphi 1.0开始,到目前最新的delphi 2006,或能越来越强,有这样一句话:真正的程序员用C,聪明的程序员用delphi.你是哪一类呢!?

白玉县13090615911: PASCAL与C,C++和JAVA不都是面向对象的程序设计语言吗?它们之间有什么不同?C#和JAVA在关于网络方面有什么 -
繁淑芪归: 是一个争论不休的话题,不同人总会有不同的见解.传统的说法是从Pascal开始,而较为新点的是C开始,这几年以来,也有提出直接从C++或者C#/Java开始学起. 首先,我先来介绍一下各种编程语言的来源、特点. Pascal语言: Pascal是一...

白玉县13090615911: pascal是怎样的语言,我初学,请指教 -
繁淑芪归: PASCAL语言也是一种算法语言,它是瑞士苏黎世联邦工业大学的N.沃思(Niklaus Wirth)教授于1968年设计完成的,1971年正式发表.1975年,对PASCAL语言进行了修改,作为"标准PASCAL语言". PASCAL语言是在ALGOL 60的基础...

白玉县13090615911: 什么是计算机pascal语言?
繁淑芪归: 我是学Delphi的,但是Delphi的核心语言就是Pascal Pascal介绍 PASCAL是一种结构程序设计语言,由瑞士苏黎世联邦工业大学的沃斯(N.Wirth)教授研制,于1971年正式发表.是从ALGOL60衍生的,但功能更强且容易使用.目前,作为一个...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网