展开全部

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

现代 C 语言借32313133353236313431303231363533e59b9ee7ad9431333236386134鉴了很多 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和python的区别_C语言和Pascal语言的区别,要详细。相关推荐

  1. 论述c语言和java语言的区别,java语言和c语言的区别有哪些

    java语言和c语言的区别有单文件的编译时间java比c语言快:c语言可以直接操作内存,java不能直接操作:c语言可以封装动态库,java不行:c语言有指针,java没有指针:c语言可以直接操作串口 ...

  2. python语言与c语言java的区别_c语言和java有什么区别

    区别:1.单文件的编译时间java比C语言快:2.C语言可以直接操作内存,java不能直接操作:3.C语言可以封装动态库,java不行:4.C语言有指针,java没有指针:5.C语言可以直接操作串口, ...

  3. c语言和java语法的区别_c语言和java语法有区别吗?

    c语言和java在语法上有区别,区别是: 1.C语言有指针,java没有指针: C语言的语法比较简单,但是它的亮点指针很容易出错,想要好好的运用指针是件很难的事情,用好了,对程序有很好的帮助,反之,就 ...

  4. c++和c语言的区别_C 语言和 C++ 有什么区别?老程序员居然这样理解,不怕你不懂...

    差不多是win98跟winXP的关系.C++是在C的基础上增加了新的理论,玩出了新的花样.所以叫C加加. C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输 ...

  5. java语言和C语言的区别

    java语言和C语言的区别 简单的说就是两种不同的语言. 区别如下: 1在运行方式上: C:原始的C是面向过程的.就是按行执行. JAVA:绝对的面向对象.就像按模块执行. (补充:当然,在C++,及 ...

  6. java语言和c语言_java语言和c语言的区别

    java语言和c语言的区别 java语言和c语言作为编程的两大语言,它们之间存在什么样的区别呢?下面百分网小编就为大家讲一讲,希望对您有所帮助! C语言是一门通用计算机编程语言,应用广泛.C语言的设计 ...

  7. java和c语言的语法区别_c语言和java的语法区别是什么?

    c语言和java的语法区别 单文件的编译时间java比C语言快: C语言可以直接操作内存,java不能直接操作: C语言可以封装动态库,java不行: C语言的代码不容易跨平台,java的代码容易跨平 ...

  8. java c语言语法对比_c语言和java语法有区别吗?

    c语言和java语法有区别吗? c语言和java在语法上有区别,区别是: 1.C语言有指针,java没有指针: C语言的语法比较简单,但是它的亮点指针很容易出错,想要好好的运用指针是件很难的事情,用好 ...

  9. r语言和python的区别_c语言和python的区别

    c语言和python的区别 1.语言类型不同. Python是一种动态类型语言,又是强类型语言.它们确定一个变量的类型是在您第一次给它赋值的时候.C 是静态类型语言,一种在编译期间就确定数据类型的语言 ...

最新文章

  1. python实现excel数据透视表_用python建立excel的数据透视表
  2. 有了Anaconda如何安装Pycharm以及简单使用和调试
  3. C语言 一个字符常量占几个字节
  4. 率先通过信通院容器规模化测评 阿里云获最高认证级别
  5. 【ABAP Graph】图表显示开发案例
  6. 完整的连接器设计手册_Harwin连接器展示在深井探油应用中不受环境影响的价值...
  7. python实现logistic_使用python实现logistic二分类
  8. 【实战 Ids4】小技巧篇:自定义登录页操作
  9. sklearn模型保存
  10. 纯新手DSP编程--5.21--CCS高级工具的使用
  11. 《Linux 系列》- 常用命令- 文件浏览命令]
  12. PN5321(PN5321A3HN/C106)国产替代,FSVP532软硬件兼容,支持A卡,B卡,FeliCa卡,支持ISO/IEC18092,ECM340点对点
  13. 接口性能测试方案设计方法有哪些?要怎么去写?
  14. 使用excel导入功能时日期数据变成数字的解决
  15. 计算机系统引导失败怎么办,电脑开机出现引导失败怎么办 是什么原因造成的...
  16. 彻底理解 Linux 的搜索工具: grep 和 awk
  17. 中职计算机专业英语说课稿,中职英语说课稿范文
  18. 【报错总结】无法连接Hive的MetaStore数据库
  19. 【javaScript 的 proxy】
  20. Phaser并发阶段器

热门文章

  1. 如何注册Docker账号
  2. 广东省专精特新中小企业申报在即,请提前准备
  3. matlab中用高斯-赛德尔(Gauss-Seidel)迭代法解线性方程组
  4. Python 实现大连海事校园网登录
  5. 无基础如何备考系统集成项目管理工程师?
  6. Matlab 常用语句
  7. 关于CH340驱动安装的种种问题的最终稳妥解决办法
  8. linux 解压zip大文件(解决乱码问题)
  9. 新IT:催生教育新世界
  10. Java语言点名器(简单版)