當前位置:編程學習大全網 - 編程語言 - 編程語言pascal

編程語言pascal

c和Pascal以前不壹樣,現在越來越像了。

現代C語言借鑒了許多Pascal概念:

比如老的C語言,類型檢查弱,沒有函數原型。但是今天的C/C++語言支持函數原型(並且不提倡舊的函數風格),類型檢查機制幾乎和Pascal壹樣嚴格。古代的C語言習慣只通過指針訪問外部變量,非常不安全,但是今天C/C++的引用參數是相當安全的。參考參數和Pascal的var參數壹模壹樣。

另外,Pascal本身也有了巨大的發展,Borland功不可沒。

現在人們用的Pascal幾乎都是Turbo Pascal或者Delphi的Object Pascal。沃思時代

程序名(輸入、輸出);

const a = 1;

type t = char的壓縮數組;

var i:整數;

開始

Writeln('這是壹個古董Pascal程序');

結束。

還有多少人認識?壹個軟件就是壹個程序begin end,分不出模塊,所以不要瘋了?

現代的Pascal語言也借鑒了C語言的很多概念,比如默認的參數值,不變的變量記錄:

類型

TPoint =記錄

的大小寫整數

0: ( x,y:擴展);

1:(半徑,角度:擴展);

結束;

case部分不是case type: integer of而是case integer of,實際上和C語言中的union是壹樣的。

至於引用數據類型(如smallint、longint、無類型指針、類型參數)和強制類型轉換機制,就不提了。

今天Pascal的文件處理有點像C語言,和過去有天壤之別。誰還記得老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,...),但帕斯卡沒有。

5.C/c++的模塊化機制是頭文件的文件包含+*的連接。obj文件,並且該文件包含壹個文本操作,所以編譯速度很慢。而Pascal是unit的連接,二進制運算,編譯速度快(對於開發大型軟件還是很重要的)。

6.c語言結構/數組初始化只需要給數值,元素個數可以比定義的少;另壹方面,Pascal必須明確指出組件名稱,並且編號應嚴格對應:

var Point: TPoint = ( x: 100,y:200);

7.c的logo是區分大小寫的,Pascal不是。

8.C編譯器預處理功能比Pascal更強大,在實踐中也很重要(彌補了C編譯器的很多不足)。

9.很容易被忽略也很重要:兩者的表達方式不同。

9.1的表達式。C/C++被賦予了太多的使命,甚至賦值語句本身就是壹個表達式,a = b同時返回a,所以可以寫成a = b = C;帕斯卡的賦值數嚴格來說就是壹個規定的運算:賦值,沒有別的,妳不可能寫出A: = B: = C。

9.2.C/c++表達式的類型嚴格取決於源操作數:char a = 100,b = 200那麽a+b的結果類型還是char,當然會溢出。Pascal會“溫柔地”將它擴展成足夠大的數據類型:

var a,b:smallint;c:longint;

答:= 32768;

b:= 32768;

c:= a+b;//結果是65536,在C語言中肯定是0。

歸根結底,C接近機器,骨子裏把操作數當成“二進制”(這有時候是優勢,尤其是處理硬件的時候);帕斯卡接近數學,試圖從數學的角度看待數值。

10.至於C的for循環有多強大,Pascal的for循環如何遵循規則,這些都不太重要。

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

我覺得最大的區別是c中不允許在函數內部定義其他函數。

但是pascal的過程函數是允許存在的。

此外,C被賦予= =帕斯卡和:=

還有就是C用{}表示範圍,但是pascal用begin end。

關於for循環c,妳可以隨意增減條件中的變量,比如

int I;

for(I = 0;我& lt100;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++的朋友。他能做的就是訪問同壹個單元其他類的私有變量。在現在的編程中,大家要盡量避免使用好友。

4.pascal的所有類都是TObject的後代,但實際上妳什麽都不寫。

AAA = class();

結束;

仍然相當於

AAA = class(to object);

結束;

這樣所有的類指針都可以被to object轉換,他在to object裏做了壹些基本的類初始化,析構函數,運算符重載。這還不如c++。

5.所有的pascal都必須顯式聲明構造函數,即使妳沒有在裏面寫任何東西。而c++不能。

6.pascal所有的類都在堆中應用,統壹管理,每個類的相互操作都在堆中進行。

但是c++可以存在於堆、棧、數據區,使得不同區域的類可以互相訪問,這就成為了c++需要解決的壹個復雜問題。

7.基於以上原因。

例如,類TDemo,

可以用C++寫

t demo * demo = new t demo();

TDemo演示;//直接創建實體

但是在pascal中,它必須被寫出來

demo:t demo;

演示:= TDemo。create();

8.另壹個問題是字符串。

現在可以說pascal的字符串可操作性比c++強。

他可以直接+,c++不行。主要原因是c++太接近底層操作了。

9.還是壹串

帕斯卡的弦分為長弦和短弦。它們從string[0]開始,它實際上存儲了字符串的長度。長串為4字節,代表壹個長度為4G的字符串,短串為1字節,最大長度為255,不像c++是以結\0結尾。

帕斯卡有很多優點。比如想得到壹個字符串的長度,c++需要掃描整個字符串,直到遇到\0,而pascal正好可以讀到[0]。這種效率從編譯後生成的匯編代碼就可以看出來。

還有壹個好處就是對於多字節字符串支持,比如unicode,因為是16bit,所以裏面會有很多\ 0,和c++的結束符號沖突,c++不得不改成\ 0 \ 0s來表示結束。而Pascal則不需要任何改變。

10 ...還有很多,壹時想不起來了。

  • 上一篇:七年級作文素材600字
  • 下一篇:linux下編寫c++,include的那些頭文件在什麽地方
  • copyright 2024編程學習大全網