現代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語言結構/數組初始化只需要給數值,元素個數可以比定義的少;帕斯卡必須明確指出要點。
數量名稱,數量嚴格對應:
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提供的電視來編程,妳壹定看過電視的源代碼,妳會發現它和德爾福的vcl多麽相似,但是他
畢竟是c++寫的,采用了很多多重繼承。德爾福後來改寫了她。
從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.還是壹串
Pascal的字符串分為長字符串和短字符串,都是以string[0]開頭,實際上存儲的是字符串的長度。
度,長串是4字節,表示壹個長度為4G的字符串,短串是1字節,最大長度是255,不像c++是壹個結的意思。
捆綁。
帕斯卡有很多優點。比如想得到壹個字符串的長度,c++需要掃描整個字符串,直到遇到\0。
出大小,而pascal只是讀[0],這種效率從編譯出來的匯編代碼就能看出來。
另壹個好處是對於多字節字符串支持,比如unicode,因為是16bit,所以會有很多\0,這和
C++不得不改為\0\0表示結束,以解決字符通靈結束符號的沖突。而Pascal則不需要任何改變。10 ...還有很多,壹時想不起來了。