पास्कल और सी की तुलना

कंप्यूटर प्रोग्रामिंग भाषा C और पास्कल की उत्पत्ति, प्रभाव और उद्देश्य समान हैं। दोनों का उपयोग उनके जीवनकाल के आरंभ में अपने स्वयं के कंपाइलरों को डिजाइन (और संकलित) करने के लिए किया जाता था। मूल पास्कल परिभाषा 1969 में प्रकाशित हुई और 1970 में इसका पहला संकलन हुआ। C का पहला संस्करण 1972 में प्रकाशित हुआ था।

दोनों ऐल्गॉल भाषा श्रृंखला के वंशज हैं। ऐल्गॉल ने संरचित प्रोग्रामिंग के प्रोग्रामिंग भाषा प्रारंभ किया, जहां प्रोग्राम एकल प्रविष्टि और एकल निकास संरचनाओं जैसे कि, अगर, जबकि, फॉर और केस से निर्मित होते हैं। पास्कल सीधे ऐल्गॉल डब्लू से उत्पन्न हुआ है, जबकि इसने ऐल्गॉल 68 के साथ कुछ नए विचारों को साझा किया। C भाषा ऐल्गॉल से अधिक अप्रत्यक्ष रूप से संबंधित है, मूल रूप से B (प्रोग्रामिंग भाषा), BCPL और CPL (प्रोग्रामिंग भाषा), और बाद में ऐल्गॉल 68 के माध्यम से ( उदाहरण के स्थितियों े में  और  ) और पास्कल भी (उदाहरण के लिए गणना के स्थितियों े में, ,   और बूलियन)। कुछ पास्कल बोलियों में सी से लक्षण भी सम्मलित   हैं।

1982 में आईएसओ 7185 के रूप में मानकीकृत निकोलस विर्थ  का पास्कल, और 1989 में मानकीकृत के रूप में ब्रायन कर्निघन और डेनिस रिची की सी यहां प्रलेखित भाषाएं हैं। इसका कारण यह है कि ये दोनों संस्करण भाषा के परिपक्व संस्करण का प्रतिनिधित्व करते हैं, और इसलिए भी क्योंकि वे तुलनात्मक रूप से समय के करीब हैं। ANSI C और C99 (बाद के C मानक) विशेषताएं, और पास्कल (टर्बो पास्कल,  फ़्री पास्कल ) के बाद के कार्यान्वयन की विशेषताएं, मजबूती और कार्यक्षमता में सुधार के बावजूद तुलना में सम्मलित   नहीं हैं।

सिंटेक्स
प्रोग्रामिंग भाषा सिंटैक्स, पास्कल सी सिंटैक्स की तुलना में बहुत अधिक ऐल्गॉल जैसा है। जहाँ C विराम चिह्नों का उपयोग करता है - पास्कल में है, वहाँ अंग्रेजी कीवर्ड बनाए रखे जाते हैं ,  , और   जहां सी उपयोग करता है  ,  , और   उदाहरण के लिए। चूँकि , (सरल) घोषणाओं के बारे में पास्कल की तुलना में C अधिक ऐल्गॉल-जैसा है, टाइप-नाम चर-नाम सिंटैक्स को बनाए रखता है। उदाहरण के लिए, C किसी भी ब्लॉक की शुरुआत में घोषणाओं को स्वीकार कर सकता है, न कि किसी फ़ंक्शन के बाहरी ब्लॉक को।

अर्धविराम का उपयोग
एक और, अधिक सूक्ष्म अंतर अर्धविराम की भूमिका है। पास्कल में, अर्धविराम एक यौगिक कथन के भीतर अलग-अलग कथनों को अलग करते हैं; इसके बजाय सी में, वे बयान समाप्त कर देते हैं। सी में, वे वाक्य रचनात्मक रूप से कथन का हिस्सा हैं (एक अभिव्यक्ति को एक बयान में बदलना)। यह अंतर मुख्य रूप से दो स्थितियों में प्रकट होता है:


 * पास्कल में अर्धविराम सीधे पहले कभी नहीं हो सकता, जबकि C में, यह अनिवार्य है, जब तक कि ब्लॉक स्टेटमेंट का उपयोग नहीं किया जाता है
 * एक से पहले अंतिम बयान  या   अर्धविराम का पालन करने की आवश्यकता नहीं है

एक अनावश्यक अर्धविराम को अंत से पहले अंतिम पंक्ति में रखा जा सकता है, जिससे औपचारिक रूप से रिक्त कथन डाला जा सकता है।

टिप्पणियाँ
पारंपरिक सी में, केवल हैं. यह केवल MIDletPascal जैसी कुछ पास्कल बोलियों द्वारा समर्थित है।

पारंपरिक पास्कल में, होते हैं  और. आधुनिक पास्कल, जैसे ऑब्जेक्ट पास्कल (डेल्फी, एफपीसी), साथ ही साथ आधुनिक सी कार्यान्वयन सी++ शैली टिप्पणियों की अनुमति देते हैं

पहचानकर्ता और कीवर्ड
सी और पास्कल ऊपरी और निचले स्थितियों े की उनकी व्याख्या में भिन्न हैं। C केस संवेदी है जबकि पास्कल नहीं है  और   सी में अलग-अलग नाम हैं किन्तु    पास्कल में समान हैं। दोनों भाषाओं में, पहचानकर्ताओं में अक्षर और अंक होते हैं, इस नियम के साथ कि पहला वर्ण अंक नहीं हो सकता है। सी में, अंडरस्कोर एक अक्षर के रूप में गिना जाता है, इसलिए _abc भी एक मान्य नाम है। एक अग्रणी अंडरस्कोर वाले नाम अधिकांशतः  सी में विशेष सिस्टम पहचानकर्ताओं को अलग करने के लिए उपयोग किए जाते हैं।

सी और पास्कल दोनों आरक्षित शब्द (भाषा द्वारा उपयोग के लिए आरक्षित शब्द) का उपयोग करते हैं। उदाहरण हैं यदि, जबकि, कॉन्स्ट, फॉर और गोटो, जो ऐसे कीवर्ड हैं जो दोनों भाषाओं के लिए सामान्य हैं। सी में, बुनियादी अंतर्निर्मित प्रकार के नाम भी खोजशब्द हैं (जैसे, int, char) या खोजशब्दों के संयोजन (जैसे, अहस्ताक्षरित चार), जबकि पास्कल में अंतर्निर्मित प्रकार के नाम पूर्वनिर्धारित सामान्य पहचानकर्ता हैं।

परिभाषाएं, घोषणाएं और ब्लॉक
पास्कल में, सबरूटीन परिभाषाएँ कीवर्ड प्रक्रिया या फ़ंक्शन से शुरू होती हैं और डेटा प्रकार प्रकार के साथ। सी में, फ़ंक्शन परिभाषाएं वाक्य रचनात्मक संदर्भ द्वारा निर्धारित की जाती हैं जबकि प्रकार परिभाषाएं कीवर्ड का उपयोग करती हैं. दोनों भाषाएं जटिल प्रकार की परिभाषाओं के लिए खोजशब्दों और विराम चिह्नों के मिश्रण का उपयोग करती हैं; उदाहरण के लिए, सरणी को पास्कल में कीवर्ड सरणी और सी में विराम चिह्न द्वारा परिभाषित किया जाता है, जबकि गणना कीवर्ड द्वारा परिभाषित की जाती है  सी में किन्तु    पास्कल में विराम चिह्न से।

पास्कल फ़ंक्शंस में, कथनों के एक ब्लॉक (उचित) को शुरू और समाप्त करें, जबकि C फ़ंक्शंस { और } का उपयोग वैकल्पिक रूप से घोषणाओं से पहले बयानों के एक ब्लॉक को परिसीमित करने के लिए करते हैं। C (C99 से पहले) सख्ती से परिभाषित करता है कि किसी भी घोषणा को किसी विशेष ब्लॉक के भीतर बयानों से पहले होना चाहिए, किन्तु   ब्लॉक को ब्लॉक के भीतर प्रकट होने की अनुमति देता है, जो इसके आसपास जाने का एक तरीका है। पास्कल सख्त है कि बयानों से पहले घोषणाएं होनी चाहिए, किन्तु    प्रकार और कार्यों की 'परिभाषा' की अनुमति देता है –  न केवल परिवर्तनीय घोषणाएं – फ़ंक्शन परिभाषाओं द्वारा गहराई के किसी भी स्तर तक एनकैप्सुलेट किया जाना है।

कार्यान्वयन
दोनों भाषाओं के व्याकरण समान आकार के हैं। एक कार्यान्वयन परिप्रेक्ष्य से दो भाषाओं के बीच मुख्य अंतर यह है कि सी को पदच्छेद करने के लिए प्रकारों के लिए एक प्रतीक तालिका तक पहुंच होना जरूरी है, जबकि पास्कल में केवल एक ऐसा निर्माण, असाइनमेंट है। उदाहरण के लिए, सी खंड  की घोषणा हो सकती है   एक वस्तु होना जिसका प्रकार सूचक है , या एक कथन-अभिव्यक्ति जो गुणा करती है   और. इसके विपरीत, संबंधित पास्कल खंड  स्वाभाविक रूप से असंदिग्ध है; सही पार्सिंग के लिए प्रतीक तालिका की आवश्यकता नहीं होती है।

पूर्णांक
पास्कल को अपने प्रकार को स्पष्ट रूप से निर्दिष्ट करने के लिए सभी चर और फ़ंक्शन घोषणाओं की आवश्यकता होती है। पारंपरिक सी में, अधिकांश संदर्भों और डिफ़ॉल्ट प्रकार में एक प्रकार का नाम छोड़ा जा सकता है  (जो मेल खाता है   पास्कल में) तब निहित रूप से मान लिया जाता है (चूँकि, इस तरह की चूक को सी में खराब अभ्यास माना जाता है और अधिकांशतः  चेतावनियों द्वारा चिह्नित किया जाता है)।

C जैसे संशोधक का उपयोग करके पूर्णांकों के लिए विभिन्न आकारों और हस्ताक्षर मोड को समायोजित करता है,  ,  ,  , आदि। परिणामी पूर्णांक प्रकार का सटीक अर्थ मशीन-निर्भर है, जिसकी गारंटी दी जा सकती है   से छोटा नहीं है   और   से छोटा नहीं है. चूँकि, सी मानक में, कम से कम न्यूनतम आकार के प्रकार निर्दिष्ट किए गए हैं जो गारंटी देते हैं  एक बाइट होने के लिए और   कम से कम दो बाइट होना।

उपश्रेणियाँ
पास्कल में, एक समान अंत पूर्णांक की उपश्रेणी घोषित करके किया जाता है (एक संकलक तब घोषित चर के लिए भंडारण की एक छोटी राशि आवंटित करने का चयन कर सकता है):

यह सबरेंज सुविधा C द्वारा समर्थित नहीं है।

सी और पास्कल के बीच एक प्रमुख, यदि सूक्ष्म, अंतर यह है कि वे पूर्णांक संचालन को कैसे बढ़ावा देते हैं। पास्कल में, एक ऑपरेशन के परिणाम को सभी पूर्णांक/उपश्रेणी प्रकारों के लिए परिभाषित किया जाता है, भले ही मध्यवर्ती परिणाम एक पूर्णांक में फिट न हों। परिणाम केवल तभी अपरिभाषित होता है जब वह असाइनमेंट के बाईं ओर पूर्णांक/उपश्रेणी में फिट नहीं होता है। यह पूर्णांक प्रकारों की सीमा पर एक कृत्रिम प्रतिबंध लगा सकता है, या मध्यवर्ती परिणामों को संभालने के लिए धीमी गति से निष्पादन की आवश्यकता हो सकती है: चूँकि, संकलक अधिक कुशल कोड का उत्पादन करने के लिए प्रतिबंधित उपश्रेणियों का लाभ उठा सकता है।

सी में, ऑपरेंड को पहले आवश्यक परिणाम के आकार में प्रचारित किया जाना चाहिए: इंटरमीडिएट परिणाम अपरिभाषित हैं यदि वे प्रचारित ऑपरेंड की सीमा में फिट नहीं होते हैं। यदि आवश्यक परिणाम की सीमा ऑपरेंड की सीमा से अधिक है, तो यह सामान्य रूप से धीमी अक्षम कोड उत्पन्न करता है, यहां तक ​​कि एक अच्छा अनुकूलन कंपाइलर से भी। चूँकि, एक सी कंपाइलर की आवश्यकता नहीं होती है या सीमा से बाहर के मध्यवर्ती परिणामों को संभालने की अपेक्षा नहीं की जाती है: यह सुनिश्चित करने के लिए प्रोग्रामर की जिम्मेदारी है कि सभी मध्यवर्ती परिणाम ऑपरेंड रेंज में फिट हों।

सी के साथ-साथ स्माल-सी एट अल के पूर्व-मानक कार्यान्वयन। अनुमत पूर्णांक और सूचक (कंप्यूटर प्रोग्रामिंग) प्रकार अपेक्षाकृत स्वतंत्र रूप से मिश्रित होने के लिए।

वर्ण प्रकार
C में कैरेक्टर टाइप है  जो एक प्रकार का पूर्णांक है जो अब से अधिक नहीं है ,. भाव जैसे  इसलिए पूरी तरह से कानूनी हैं, जैसे घोषणाएं हैं   और.

यह पूर्णांक प्रकृति  (एक बाइट) जैसे घोषणाओं द्वारा स्पष्ट रूप से चित्रित किया गया है चाहे  प्रकार माना जाना चाहिए   या   डिफ़ॉल्ट रूप से कार्यान्वयन तक है।

पास्कल में, वर्ण और पूर्णांक भिन्न प्रकार होते हैं। इनबिल्ट कंपाइलर कार्य करता है  और   उपयोग में सेट वर्ण के संबंधित पूर्णांक मान के लिए एकल वर्णों को टाइपकास्ट करने के लिए उपयोग किया जा सकता है, और इसके विपरीत। उदा. ASCII कैरेक्टर सेट का उपयोग करने वाले सिस्टम पर  और   एक टैब चरित्र है।

बूलियन प्रकार
पास्कल में, बूलियन डेटाटाइप एक प्रगणित प्रकार है। बूलियन के संभावित मान गलत और सही हैं, झूठी = 0 और सही = 1 के क्रमिक मूल्य के साथ। पूर्णांक में रूपांतरण के लिए, ord का उपयोग किया जाता है:

पूर्णांक से बूलियन के लिए कोई मानक कार्य नहीं है, चूँकि, व्यवहार में रूपांतरण सरल है:

सी में बाइनरी वैल्यू रिलेशनल ऑपरेटर्स (<,>, ==, !=, <=,>=) हैं, जिन्हें इस अर्थ में बूलियन माना जा सकता है कि वे हमेशा परिणाम देते हैं जो या तो शून्य या एक होते हैं। जैसा कि सभी परीक्षण (&&, ||, ?:, 'अगर', 'जबकि', आदि) शून्य-चेक ​​द्वारा किए जाते हैं, 'गलत' को शून्य द्वारा दर्शाया जाता है, जबकि 'सत्य' को किसी अन्य मान द्वारा दर्शाया जाता है।

बिटवाइज़ ऑपरेशंस
सी बूलियन ऑपरेशन करने के लिए बिटवाइज़ ऑपरेशन ऑपरेटर (प्रोग्रामिंग) का उपयोग करने की अनुमति देता है। सावधानी बरतनी चाहिए क्योंकि शब्दार्थ भिन्न होते हैं जब ऑपरेंड एक मूल्य का प्रतिनिधित्व करने के लिए एक से अधिक बिट का उपयोग करते हैं।

पास्कल के पास बिटवाइज़ डेटा, सेट से निपटने का एक और अधिक सार, उच्च स्तरीय तरीका है। सीधे बिटवाइज़ ऑपरेटरों (जो आधुनिक पास्कल में भी उपलब्ध हैं) का उपयोग करने के बजाय, सेट प्रोग्रामर को बिटवाइज़ डेटा मानों को सेट, क्लियर, इंटरसेक्ट और एकजुट करने की अनुमति देता है। उदाहरण;

पास्कल: सी: चूँकि पूर्णांक पर बिट संचालन और सेट पर संचालन को समान माना जा सकता है यदि सेट बिट्स का उपयोग करके कार्यान्वित किया जाता है, उनके उपयोग के बीच कोई सीधा समानांतर नहीं होता है जब तक कि पूर्णांक और सेट के बीच गैर-मानक रूपांतरण संभव न हो।

कार्यान्वयन पर एक नोट
अभिव्यक्ति मूल्यांकन के दौरान, और दोनों भाषाओं में, एक बूलियन मान आंतरिक रूप से मशीन के आधार पर एक बिट, एक बाइट, एक पूर्ण मशीन शब्द, उत्पन्न कोड में एक स्थिति या एक स्थिति कोड के रूप में एक स्थिति कोड के रूप में संग्रहीत किया जा सकता है।, संकलक, और स्थिति; ये कारक सामान्यतः संकलित भाषा से अधिक महत्वपूर्ण होते हैं।

तैरनेवाला स्थल प्रकार
सी में पास्कल की तुलना में फ़्लोटिंग पॉइंट प्रकार का कम सख्त मॉडल है। सी में, पूर्णांक को फ़्लोटिंग पॉइंट नंबरों में अंतर्निहित रूप से परिवर्तित किया जा सकता है, और इसके विपरीत (चूँकि संभावित सटीक हानि चेतावनियों द्वारा फ़्लैग की जा सकती है)। पास्कल में, पूर्णांकों को परोक्ष रूप से रूपांतरित किया जा सकता है , किन्तु    का रूपांतरण   को   (जहाँ जानकारी खो सकती है) कार्यों के माध्यम से स्पष्ट रूप से किया जाना चाहिए   और  , जो क्रमशः अंश को काटता या गोल करता है।

गणना प्रकार
सी और पास्कल दोनों में गणना प्रकार सम्मलित  हैं। पास्कल उदाहरण:

ए सी उदाहरण:

चूँकि दो भाषाओं में प्रकारों का व्यवहार बहुत अलग है। सी में,   0 का पर्यायवाची बन जाता है,   1 के लिए,   2 के लिए, और कुछ भी इस श्रेणी के बाहर के मान को चर को असाइन करने से नहीं रोकता है. इसके अलावा, संचालन जैसे  पास्कल में सख्त वर्जित हैं; इसके बजाय आप प्रयोग करेंगे. C में, एनमों को स्वतंत्र रूप से और ints से परिवर्तित किया जा सकता है, किन्तु   पास्कल में, फ़ंक्शन ord का उपयोग प्रगणित प्रकारों से पूर्णांकों में परिवर्तित करने के लिए किया जाना चाहिए, विपरीत रूपांतरण में टाइपकास्ट ऑपरेशन का उपयोग किया जाना चाहिए जैसे   के लिए   मूल्य वापसी।

सरणी प्रकार
सी और पास्कल दोनों अन्य सरणियों सहित अन्य जटिल प्रकारों के सरणी डेटा प्रकार की अनुमति देते हैं। चूँकि, वहाँ भाषाओं के बीच समानता समाप्त हो जाती है। सी सरणियों को केवल आधार प्रकार और तत्वों की संख्या से परिभाषित किया जाता है: और हमेशा 0 से SIZE−1 (यानी मॉड्यूलो SIZE) तक अनुक्रमित होते हैं।

पास्कल में, सूचकांकों की श्रेणी को अधिकांशतः एक उपश्रेणी द्वारा निर्दिष्ट किया जाता है (जैसा कि ऊपर सरल प्रकार के तहत पेश किया गया है)। के दस तत्व 0..9 द्वारा अनुक्रमित किया जाएगा (जैसा कि इस स्थितियों में C में है)। ऐरे इंडेक्स कोई भी क्रमिक डेटा प्रकार हो सकता है, चूँकि, केवल रेंज नहीं: n (>1) वर्णों वाले स्ट्रिंग्स को श्रेणी 1..n के साथ पैक किए गए सरणियों के रूप में परिभाषित किया गया है।

सरणियाँ और संकेत
सी अभिव्यक्तियों में, एक सरणी का प्रतिनिधित्व करने वाले पहचानकर्ता को सरणी के पहले तत्व के लिए निरंतर सूचक के रूप में माना जाता है, इस प्रकार, घोषणाओं को देखते हुए  और   सौंपा गया काम   मान्य है और p और a को समान सरणी की ओर इंगित करता है। पहचानकर्ता के रूप में   एक निरंतर पते का प्रतिनिधित्व करता है,   चूँकि  मान्य नहीं है।

जबकि C में सरणियाँ निश्चित हैं, उनके लिए संकेत विनिमेय हैं। यह लचीलापन सी को समान कोड का उपयोग करके किसी भी लम्बाई सरणी में हेरफेर करने की अनुमति देता है। यह प्रोग्रामर को आवंटित सरणी के बाहर नहीं लिखने की ज़िम्मेदारी भी छोड़ देता है, क्योंकि भाषा में कोई चेक नहीं बनाया गया है।

पास्कल में, सरणियाँ पॉइंटर्स से अलग प्रकार हैं। यह एक संकलक के नजरिए से सरणियों के लिए सीमा जाँच को संभव बनाता है। व्यावहारिक रूप से सभी पास्कल कंपाइलर एक संकलन विकल्प के रूप में रेंज चेकिंग का समर्थन करते हैं। दोनों की क्षमता में सरणी होती है जो रनटाइम पर लंबाई बदलती है, और भाषा नियंत्रण के तहत उन्हें जांचने में सक्षम होती है, जिसे अधिकांशतः गतिशील सरणी कहा जाता है। पास्कल में प्रत्येक ऐरे प्रकार में तत्वों की संख्या संकलन-समय पर निर्धारित की जाती है और प्रोग्राम के निष्पादन के दौरान इसे बदला नहीं जा सकता है। इसलिए, एक सरणी को परिभाषित करना संभव नहीं है जिसकी लंबाई किसी भी तरह से प्रोग्राम डेटा पर निर्भर करती है।

सी में मनमाना लंबाई के सरणियों को आरंभ करने की क्षमता है।  ई> ऑपरेटर का उपयोग सी कोड में स्थिर प्रारंभिक सरणी के आकार को प्राप्त करने के लिए किया जा सकता है। उदाहरण के लिए निम्नलिखित कोड में, लूप के लिए समाप्ति सूचकांक स्वचालित रूप से समायोजित हो जाता है, स्ट्रिंग्स की सूची बदली जानी चाहिए।

मूल पास्कल में न तो सरणी आरंभीकरण (तारों के स्थितियों े के बाहर) है और न ही संकलन समय पर मनमाना सरणी आकार निर्धारित करने का साधन है।

पास्कल में उपरोक्त उदाहरण को लागू करने का एक तरीका है, किन्तु स्वत: आकार समायोजन के बिना, यह है:

स्ट्रिंग्स
दोनों भाषाओं में, एक स्ट्रिंग वर्णों का एक आदिम सरणी है।

पास्कल में लंबाई n का एक स्ट्रिंग अक्षर प्रकार के साथ संगत है. सी में एक स्ट्रिंग में सामान्यतः प्रकार होता है.

पास्कल के पास चर-लंबाई सरणियों के लिए कोई समर्थन नहीं है, और इसलिए स्ट्रिंग संचालन करने के लिए रूटीन का कोई भी सेट एक विशेष स्ट्रिंग आकार पर निर्भर है। अब मानकीकृत पास्कल अनुरूप सरणी पैरामीटर एक्सटेंशन इसे काफी हद तक हल करता है, और पास्कल के कई या यहां तक ​​कि अधिकांश कार्यान्वयन भाषा के मूल स्ट्रिंग के लिए समर्थन करते हैं।

सी स्ट्रिंग लिटरल अशक्त-समाप्त स्ट्रिंग  हैं | नल-टर्मिनेटेड; यह कहना है, एक अनुगामी अशक्त वर्ण अंत-की-स्ट्रिंग प्रहरी मान के रूप में: सरणियों में संग्रहीत स्ट्रिंग चर के लिए अशक्त-समाप्ति को मैन्युअल रूप से बनाए रखा जाना चाहिए (यह अधिकांशतः लाइब्रेरी रूटीन द्वारा आंशिक रूप से नियंत्रित किया जाता है)।

सी में अंतर्निहित स्ट्रिंग या सरणी असाइनमेंट की कमी है, इसलिए स्ट्रिंग को पी में स्थानांतरित नहीं किया जा रहा है, बल्कि पी को स्मृति में निरंतर स्ट्रिंग को इंगित करने के लिए बनाया जा रहा है।

पास्कल में, सी के विपरीत, स्ट्रिंग का पहला वर्ण तत्व इंडेक्स 1 पर है और 0 नहीं है (इसे स्ट्रिंग (कंप्यूटर विज्ञान)#Length-prefixed|length-prefixed) होने के लिए अग्रणी है। ऐसा इसलिए है क्योंकि पास्कल स्ट्रिंग की लंबाई को वर्ण सरणी के 0 वें तत्व पर संग्रहीत करता है। यदि यह अंतर अच्छी तरह से नहीं समझा जाता है, तो यह में porting  या दोनों भाषाओं द्वारा उत्पन्न  वस्तु कोड  को इंटरफ़ेस करने का प्रयास करते समय त्रुटियों का कारण बन सकता है।

FreeBSD डेवलपर Poul-Henning Kamp, ACM Queue में लिखते हुए, बाद में लंबाई-प्रीफ़िक्स्ड स्ट्रिंग्स पर नल-टर्मिनेटेड स्ट्रिंग्स की जीत को अब तक की सबसे महंगी एक-बाइट गलती के रूप में संदर्भित करेंगे।

रिकॉर्ड प्रकार
सी और पास्कल दोनों वस्तु संरचना प्रकार घोषित कर सकते हैं। सी में, उन्हें संरचनाएं कहा जाता है। पास्कल में, हम name_of_record.name_of_field लिखने के बजाय उस रिकॉर्ड की फ़ील्ड्स जैसे स्थानीय चरों का सीधे उपयोग करने के लिए name_of_record do वाले वाक्य का उपयोग कर सकते हैं। यहाँ एक उदाहरण है: C में with के समान कोई विशेषता नहीं है।

सी में, फ़ील्ड की सटीक बिट लंबाई निर्दिष्ट की जा सकती है: कितना भंडारण उपयोग किया जाता है यह लक्ष्य प्रणाली के लक्षणों (जैसे, शब्द-संरेखण) पर निर्भर करता है।

यह सुविधा पास्कल में सबरेंज कंस्ट्रक्शन (3 बिट्स 0 से 7 तक की सीमा देता है) का उपयोग करके कीवर्ड पैक के साथ उपलब्ध है: सी और पास्कल दोनों रिकॉर्ड का समर्थन करते हैं जिसमें एक दूसरे को ओवरलैप करने वाले विभिन्न फ़ील्ड सम्मलित  हो सकते हैं: संघ/रिकॉर्ड में सबसे बड़ा प्रकार सम्मलित  करने के लिए आवश्यक दोनों भाषा प्रोसेसर इन अभिलेखों के लिए केवल उतना ही स्थान आवंटित करने के लिए स्वतंत्र हैं।

सी और पास्कल के बीच सबसे बड़ा अंतर यह है कि पास्कल टैग किए गए संघ का समर्थन करता है | भाषा प्रोसेसर के लिए टैगफील्ड का स्पष्ट उपयोग यह निर्धारित करने के लिए कि वेरिएंट रिकॉर्ड के वैध घटक का उपयोग किया जा रहा है या नहीं: इस स्थिति में, रिकॉर्ड के उचित भागों तक पहुँचने के लिए टैग फ़ील्ड q को सही स्थिति में सेट किया जाना चाहिए।

पॉइंटर्स
सी में, ऑब्जेक्ट्स या फ़ंक्शंस सहित अधिकांश प्रोग्राम संस्थाओं को इंगित करने के लिए पॉइंटर्स बनाए जा सकते हैं:

सी में, चूंकि सरणी और पॉइंटर्स के पास समानता है, निम्न समान हैं:

इस प्रकार, पॉइंटर्स का उपयोग अधिकांशतः C में सरणियों तक पहुँचने के लिए एक अन्य विधि के रूप में किया जाता है।

गतिशील डेटा बनाने के लिए, पुस्तकालय कार्य करता है  और   डेटा के गतिशील ब्लॉक प्राप्त करने और जारी करने के लिए उपयोग किया जाता है। इस प्रकार, डायनेमिक मेमोरी आवंटन भाषा प्रोसेसर में नहीं बनाया गया है। यह विशेष रूप से मूल्यवान है जब C का उपयोग ऑपरेटिंग सिस्टम कर्नेल या एम्बेडेड लक्ष्यों में किया जा रहा है क्योंकि ये चीजें बहुत ही प्लेटफ़ॉर्म (न केवल आर्किटेक्चर) विशिष्ट हैं और प्रत्येक प्लेटफ़ॉर्म (या ऑपरेटिंग सिस्टम) के लिए C कंपाइलर को बदलने की आवश्यकता होगी, जिस पर इसका उपयोग किया जाएगा।

पास्कल में C के समान पॉइंटर्स नहीं होते हैं, किन्तु   इसमें एक अप्रत्यक्ष ऑपरेटर होता है जो C पॉइंटर्स के सबसे सामान्य उपयोग को कवर करता है। प्रत्येक सूचक एक गतिशील डेटा आइटम के लिए बाध्य है, और केवल असाइनमेंट द्वारा स्थानांतरित किया जा सकता है:

पास्कल में पॉइंटर्स टाइप सेफ होते हैं; यानी एक डेटा प्रकार के लिए एक सूचक केवल उसी डेटा प्रकार के सूचक को असाइन किया जा सकता है। साथ ही पॉइंटर्स को नॉन-पॉइंटर वेरिएबल्स को कभी भी असाइन नहीं किया जा सकता है। पास्कल में पॉइंटर अंकगणित (सी में प्रोग्रामिंग त्रुटियों का एक सामान्य स्रोत, विशेष रूप से endianness मुद्दों और प्लेटफ़ॉर्म-स्वतंत्र प्रकार के आकारों के साथ संयुक्त होने पर) की अनुमति नहीं है। ये सभी प्रतिबंध सी की तुलना में पास्कल में सूचक संबंधी त्रुटियों की संभावना को कम करते हैं, किन्तु   पास्कल में अमान्य सूचक संदर्भों को पूरी तरह से नहीं रोकते हैं। उदाहरण के लिए, एक रनटाइम त्रुटि तब होगी जब किसी सूचक को आरंभिक होने से पहले या उसके निपटारे के बाद संदर्भित किया गया हो।

वरीयता स्तर
जब अभिव्यक्ति मूल्यांकन की बात आती है तो भाषाएँ महत्वपूर्ण रूप से भिन्न होती हैं, किन्तु   कुल मिलाकर वे तुलनीय हैं।

पास्कल सी
 * 1) तार्किक निषेध:
 * 2) गुणक:
 * 3) योज्य:
 * 4) संबंधपरक:
 * 1) यूनरी पोस्टफिक्स:
 * 2) यूनरी उपसर्ग:
 * 3) गुणक:
 * 4) योज्य:
 * 5) बदलाव:
 * 6) संबंधपरक:
 * 7) समानता:
 * 8) बिटवाइज़ और:
 * 9) बिटवाइज़ एक्सोर:
 * 10) बिटवाइज़ या:
 * 11) तार्किक और:
 * 12) तार्किक या:
 * 13) सशर्त:
 * 14) कार्यभार:
 * 15) कॉमा ऑपरेटर:

टाइपिंग
अधिकांश ऑपरेटर पास्कल में कई उद्देश्यों की पूर्ति करते हैं, उदाहरण के लिए, नकारात्मक चिह्न का उपयोग निषेध, घटाव या सेट अंतर के लिए किया जा सकता है (दोनों प्रकार और वाक्यात्मक संदर्भ के आधार पर),  ऑपरेटर का उपयोग संख्याओं, स्ट्रिंग्स या सेटों आदि की तुलना करने के लिए किया जा सकता है। सी अधिक हद तक समर्पित ऑपरेटर प्रतीकों का उपयोग करता है।

असाइनमेंट और समानता परीक्षण
दो भाषाएँ असाइनमेंट के लिए अलग-अलग ऑपरेटरों का उपयोग करती हैं। पास्कल, ऐल्गॉल की तरह, गणितीय समानता ऑपरेटर का उपयोग करता है  समानता परीक्षण और प्रतीक के लिए   असाइनमेंट के लिए, जबकि C, जैसे B (प्रोग्रामिंग भाषा ), असाइनमेंट के लिए गणितीय समानता ऑपरेटर का उपयोग करता है। सी (और बी) में नया   प्रतीक इसलिए समानता परीक्षण के लिए पेश किया गया था।

यह C में एक सामान्य गलती है, या तो अनुभवहीनता या एक साधारण टाइपिंग त्रुटि के कारण, गलती से असाइनमेंट एक्सप्रेशन को सशर्त बयानों में डाल दिया जाता है जैसे. असाइनमेंट एक्सप्रेशन के कारण ब्रेसिज़ में कोड हमेशा निष्पादित होगा  का मान 10 है जो गैर-शून्य है और इसलिए C में सत्य माना जाता है; यह भाग में है क्योंकि C (और ऐल्गॉल) फॉर्म में कई असाइनमेंट की अनुमति देता है   जो पास्कल द्वारा समर्थित नहीं है। यह भी ध्यान दें   अब मूल्य है , जो निम्नलिखित कोड को प्रभावित कर सकता है। हाल के सी कंपाइलर इन स्थितियों  का पता लगाने की कोशिश करते हैं और उपयोगकर्ता को कम अस्पष्ट सिंटैक्स की तरह पूछते हुए चेतावनी देते हैं.

पास्कल में इस तरह की गलती नहीं हो सकती है, क्योंकि असाइनमेंट एक्सप्रेशन नहीं हैं और उनका कोई मूल्य नहीं है: गलत ऑपरेटर का उपयोग करने से एक स्पष्ट संकलन त्रुटि होगी, और यह भी कम संभावना है कि कोई भी गलती करेगा  समानता परीक्षण के लिए प्रतीक।

यह उल्लेखनीय है कि ऐल्गॉल की सशर्त अभिव्यक्ति के रूप में  सी में समतुल्य है किन्तु    पास्कल में नहीं है।

कार्यान्वयन मुद्दे
जब निक्लॉस विर्थ ने पास्कल को डिज़ाइन किया, तो इच्छा पूर्वता के स्तरों की संख्या को सीमित करने की थी (आखिरकार कम पार्स रूटीन)। तो OR और एक्सक्लूसिव OR ऑपरेटर्स को एक Addop की तरह ही माना जाता है और एक मैथ एक्सप्रेशन के स्तर पर प्रोसेस किया जाता है। इसी तरह, AND को मुलोप की तरह माना जाता है और टर्म के साथ संसाधित किया जाता है। पूर्वता स्तर हैं  स्तर सिंटैक्स तत्व ऑपरेटर

0 कारक शाब्दिक, चर 1 हस्ताक्षरित कारक यूनरी माइनस, नहीं 2 पद *, /, और 3 व्यंजक +, -, या  ध्यान दें कि सिंटैक्स नियमों का केवल एक सेट है, जो दोनों प्रकार के ऑपरेटरों पर लागू होता है। इस व्याकरण के अनुसार, फिर, जैसे भाव  एक्स + (वाई और नहीं जेड) / 3  पूरी तरह कानूनी हैं। और, वास्तव में, जहां तक ​​पार्सर का संबंध है, वे हैं। पास्कल अंकगणित और बूलियन चर के मिश्रण की अनुमति नहीं देता है, और इस तरह की चीजें सिमेंटिक स्तर पर पकड़ी जाती हैं, जब सिंटैक्स स्तर के बजाय उनके लिए कोड उत्पन्न करने का समय आता है।

सी के लेखकों ने एक बिल्कुल विपरीत दृष्टिकोण अपनाया: वे ऑपरेटरों को अलग-अलग मानते हैं, और वास्तव में, सी में 15 से कम स्तर नहीं हैं। ऐसा इसलिए है क्योंकि C में ऑपरेटर्स '=', '+=' और उसके परिजन, '<<', '>>', '++', '--', आदि भी हैं। चूँकि C में अंकगणित और बूलियन ऑपरेटर हैं अलग से व्यवहार किया जाता है, चर नहीं हैं: किसी भी पूर्णांक मान पर बूलियन परीक्षण किया जा सकता है।

तार्किक संयोजक
पास्कल में एक बूलियन अभिव्यक्ति जो एक विशेष मूल्यांकन आदेश पर निर्भर करती है (संभवतः फ़ंक्शन कॉल में साइड-इफेक्ट्स के माध्यम से), कम या ज्यादा, एक त्रुटि के रूप में माना जाता है। पास्कल कंपाइलर को यह स्वतंत्रता है कि वह जो भी क्रम पसंद कर सकता है उसका उपयोग कर सकता है और हमेशा पूरी अभिव्यक्ति का मूल्यांकन करना चाहिए, भले ही परिणाम आंशिक मूल्यांकन द्वारा निर्धारित किया जा सके।

सी में, बूलियन मूल्यांकन आदेश पर निर्भरता पूरी तरह से कानूनी है, और अधिकांशतः व्यवस्थित रूप से इसका उपयोग करके नियोजित किया जाता है   और   ऑपरेटरों के साथ-साथ ऑपरेटरों जैसे ,  , अल्पविराम ऑपरेटर, आदि।   ई> और   ऑपरेटर इस प्रकार तार्किक ऑपरेटरों और सशर्त बयानों के संयोजन के रूप में कार्य करते हैं।

मूल्यांकन समस्या के कारण शॉर्ट सर्किट अभिव्यक्ति मूल्यांकन को सामान्यतः C के लिए एक लाभ माना गया है: पास्कल में यह प्रतीत होता है कि सीधी खोज समस्याग्रस्त है क्योंकि सरणी का उपयोग [i] 11 के बराबर के लिए अमान्य होगा। इस समस्या से बचने के एक से अधिक तरीके हैं। निम्न उदाहरण एक बूलियन चर का परिचय देता है जो इंगित करता है कि लक्ष्य वर्ण पाया गया है या नहीं:

नियंत्रण संरचनाएं
नियंत्रण संरचनाओं के निर्माण के लिए कथन लगभग समान और अपेक्षाकृत समान हैं (कम से कम पहले तीन)।

पास्कल में है: सी है:
 * if cond then stmt else stmt
 * while cond do stmt
 * repeat stmt until cond
 * for id := expr to expr do stmt and for id := expr downto expr do stmt
 * case expr of expr : stmt; ... expr : stmt; else: stmt; end
 * if (cond) stmt else stmt
 * while (cond) stmt
 * do stmt while (cond);
 * for (expr; cond; expr) stmt
 * switch (expr) { case expr : stmt; ... case expr : stmt; default: stmt }

पास्कल, अपने मूल रूप में, डिफ़ॉल्ट के समकक्ष नहीं था, किन्तु   एक समान अन्य खंड एक सामान्य विस्तार है। पास्कल प्रोग्रामर को अन्यथा अभिव्यक्ति के साथ केस-स्टेटमेंट की रक्षा करनी पड़ती थी: if expr not in [A..B] then default-case.

सी में तथाकथित अर्ली-आउट स्टेटमेंट ब्रेक और जारी हैं, और कुछ पास्कल के पास भी हैं।

सी और पास्कल दोनों का गोटो स्टेटमेंट है। चूँकि, चूंकि पास्कल में नेस्टेड प्रक्रियाएँ/कार्य हैं, एक आंतरिक प्रक्रिया या कार्य से युक्त एक तक छलांग लगाई जा सकती है; यह सामान्यतः त्रुटि पुनर्प्राप्ति को लागू करने के लिए उपयोग किया जाता था। C में ANSI C setjmp/longjmp के माध्यम से यह क्षमता है। यह समतुल्य है, किन्तु    यकीनन कम सुरक्षित है, क्योंकि यह प्रोग्राम विशिष्ट जानकारी जैसे जंप एड्रेस और स्टैक फ्रेम को प्रोग्रामर सुलभ संरचना में संग्रहीत करता है।

कार्य और प्रक्रियाएं
पास्कल रूटीन जो मान लौटाते हैं उन्हें फ़ंक्शन कहा जाता है; रूटीन जो कोई मान वापस नहीं करते हैं उन्हें प्रक्रियाएँ कहा जाता है। C में सभी रूटीन को फंक्शन कहा जाता है; सी फ़ंक्शन जो मान वापस नहीं करते हैं उन्हें रिटर्न प्रकार के शून्य प्रकार के साथ घोषित किया जाता है।

पास्कल प्रक्रियाओं को सी शून्य कार्यों के बराबर माना जाता है, और पास्कल कार्यों को सी कार्यों के बराबर माना जाता है जो मान लौटाते हैं।

C में निम्नलिखित दो घोषणाएँ: पास्कल में निम्नलिखित घोषणाओं के बराबर हैं: पास्कल के दो अलग-अलग प्रकार के पैरामीटर हैं: पास-बाय-वैल्यू और पास-बाय-रेफरेंस (VAR)। सी में सभी पैरामीटर वैल्यू द्वारा पास किए जाते हैं किन्तु   पास-बाय-रेफरेंस को पॉइंटर्स का उपयोग करके सिम्युलेट किया जा सकता है। निम्नलिखित खंड उपरोक्त पास्कल खंड के समान है:

सी फ़ंक्शन को पैरामीटर की एक चर संख्या को स्वीकार करने की अनुमति देता है, जिसे वैरिएडिक फ़ंक्शंस के रूप में जाना जाता है।

कार्यक्रम  कार्यों के एक विशेष सेट का उपयोग करता है जो बदले में प्रत्येक पैरामीटर को एक्सेस करने की अनुमति देता है।

इसके अतिरिक्त पास्कल में I/O कथन भाषा में बनाए गए पैरामीटर की परिवर्तनीय मात्रा को संभालने के लिए हैं. पास्कल प्रक्रियाओं और कार्यों को नेस्टेड कार्य करने की अनुमति देता है। प्रक्रियाओं के एक समारोह सूचक लिए स्थानीय चर की अनुमति देना सुविधाजनक है, किन्तु   वैश्विक नहीं है। C में इस सुविधा का अभाव है और चर या कार्यों का स्थानीयकरण केवल एक संकलन मॉड्यूल के लिए किया जा सकता है जिसमें चर या कार्यों को स्थिर घोषित किया गया होगा।

सी कार्यों को अप्रत्यक्ष रूप नेस्टेड समारोह पॉइंटर के माध्यम से लागू करने की अनुमति देता है। निम्नलिखित उदाहरण में, कथन  के बराबर है  :

पास्कल भी कार्यों और प्रक्रियाओं को कार्यों या प्रक्रियाओं के पैरामीटर के रूप में पारित करने की अनुमति देता है:

preprocessor
प्रारंभिक सी में न तो निरंतर घोषणाएँ थीं और न ही प्रकार की घोषणाएँ, और सी भाषा को मूल रूप से एक प्रीप्रोसेसर की आवश्यकता के रूप में परिभाषित किया गया था; मेमोरी उपयोग को कम रखने के लिए एक अलग प्रोग्राम, और पास, जो स्थिर, सम्मलित है और मैक्रो (कंप्यूटर विज्ञान) परिभाषाएं संभालता है। बाद में, एएनएसआई सी के साथ, इसने निरंतर और प्रकार की परिभाषाएं प्राप्त कीं और प्रीप्रोसेसर भी भाषा का हिस्सा बन गया, जो आज हम देखते हैं कि सिंटैक्स के लिए अग्रणी है।

पास्कल स्थिरांक और प्रकार परिभाषित किए गए हैं, किन्तु पास्कल के साथ एक प्रीप्रोसेसर का उपयोग करने वाले प्रोग्रामर थे (कभी-कभी वही सी के साथ प्रयोग किया जाता है), निश्चित रूप से सी के साथ उतना सामान्य नहीं है। चूँकि अधिकांशतः  पास्कल की कमी के रूप में इंगित किया जाता है, तकनीकी रूप से सी करता है न तो प्रोग्राम मॉड्युलैरिटी है और न ही मैक्रोज़ इन में निर्मित हैं। इसमें एक साधारण निम्न स्तर की अलग संकलन सुविधा है, चूँकि  (परंपरागत रूप से असेंबली भाषा के लिए उपयोग किए जाने वाले समान सामान्य लिंकर का उपयोग करते हुए), पास्कल नहीं करता है।

टाइप एस्केप
सी में, प्रोग्रामर किसी वस्तु के बाइट-स्तर के प्रतिनिधित्व को इंगित करके निरीक्षण कर सकता है  इसके लिए सूचक: पास्कल में एक अविभेदित संस्करण रिकॉर्ड का उपयोग करके कुछ समान करना संभव हो सकता है: चूँकि अधिकांश पास्कल कंपाइलर और दुभाषियों पर कास्टिंग संभव है, यहां तक ​​​​कि a2c.a और a2c.b के ऊपर के कोड में भी पास्कल मानकीकरण द्वारा समान पता स्थान साझा करने की आवश्यकता नहीं है। पास्कल के डिजाइनर निकलॉस विर्थ ने इस दृष्टिकोण का उपयोग करके बचने के प्रयास की समस्याग्रस्त प्रकृति के बारे में लिखा है:

पास्कल के अधिकांश कार्यान्वयनकर्ताओं ने निर्णय लिया कि यह जाँच बहुत महंगी होगी, कोड को बढ़ाना और कार्यक्रम की दक्षता को कम करना। परिणामस्वरूप, वैरिएंट रिकॉर्ड सभी प्रोग्रामरों द्वारा ट्रिक्स के प्यार में टाइप सिस्टम को भंग करने के लिए एक पसंदीदा विशेषता बन गया, जो सामान्यतः नुकसान और आपदाओं में बदल जाता है।

कई भाषाएँ अब विशेष रूप से इस प्रकार के पलायन को बाहर कर देती हैं, उदाहरण के लिए जावा, सी # और विर्थ की अपनी ओबेरॉन (प्रोग्रामिंग भाषा)।

फाइलें
सी फाइलों में एक अंतर्निर्मित प्रकार के रूप में मौजूद नहीं है (वे सिस्टम हेडर में परिभाषित हैं) और सभी I/O लाइब्रेरी कॉल के माध्यम से होते हैं। पास्कल में फ़ाइल प्रबंधन भाषा में निर्मित है।

प्रत्येक भाषा में I/O करने के लिए उपयोग किए जाने वाले विशिष्ट कथन हैं:

मुख्य अंतर यह है कि सी एक प्रारूप स्ट्रिंग का उपयोग करता है जिसे प्रिंटफ फ़ंक्शन के तर्कों को खोजने और उन्हें परिवर्तित करने के लिए व्याख्या की जाती है, जबकि पास्कल भाषा प्रोसेसर के नियंत्रण में करता है। पास्कल विधि यकीनन तेज है, क्योंकि कोई व्याख्या नहीं होती है, किन्तु   सी विधि अत्यधिक विस्तार योग्य है।

बाद में पास्कल कार्यान्वयन और विस्तार
कुछ लोकप्रिय पास्कल कार्यान्वयनों ने पास्कल में वस्तुतः सभी C निर्माणों को सम्मलित किया है। उदाहरणों में टाइप कास्ट, किसी भी चर, स्थानीय या वैश्विक का पता प्राप्त करने में सक्षम होना और विशेष प्रचार गुणों के साथ विभिन्न प्रकार के पूर्णांक सम्मलित होते है।

चूँकि, प्रकार और प्रकार के रूपांतरणों के प्रति C के नरम प्रवृति समावेश के परिणामस्वरूप पास्कल अपनी कुछ या सभी प्रकार की सुरक्षा खो सकता है। उदाहरण के लिए, जावा (प्रोग्रामिंग भाषा) और C# को सी के कुछ कथित प्रकार के सुरक्षा मुद्दों को संबोधित करने के लिए बनाया गया था, और इसमें "प्रबंधित" पॉइंटर्स हैं जिनका उपयोग अमान्य संदर्भ बनाने के लिए नहीं किया जा सकता है। अपने मूल रूप में (जैसा कि निकलॉस विर्थ द्वारा वर्णित है), पास्कल एक प्रबंधित सूचक भाषा के रूप में अर्हता प्राप्त करता है, या तो जावा या C# से लगभग 30 साल पहले। चूँकि, C के साथ समामेलित पास्कल परिभाषा के अनुसार उस सुरक्षा को खो देगा। सामान्यतः,बुनियादी कार्यों के लिए पॉइंटर्स पर कम निर्भरता इसे व्यवहार में C की तुलना में अधिक सुरक्षित बनाती है।

विस्तारित पास्कल मानक कई चीजों का समर्थन करने के लिए पास्कल का विस्तार करता है, जो सी का समर्थन करता है, जो कि मूल मानक पास्कल नहीं था, एक प्रकार से सुरक्षित तरीके से। उदाहरण के लिए, स्कीमा प्रकार समर्थन (अन्य उपयोगों के अलावा) चर-लंबाई सरणियों को सरणी के साथ सरणी आयाम ले जाने की प्रकार-सुरक्षा को बनाए रखते हुए, गतिशील रूप से आकार वाले सरणियों के लिए आउट-ऑफ-रेंज इंडेक्स के लिए स्वचालित रन-टाइम चेक की अनुमति देता है।

यह भी देखें

 * सी (प्रोग्रामिंग भाषा), सी ++
 * पास्कल (प्रोग्रामिंग भाषा ), वस्तु पास्कल, फ्री पास्कल,  डेल्फी (प्रोग्रामिंग भाषा) , ऑक्सीजन (प्रोग्रामिंग भाषा )
 * घटक पास्कल

अग्रिम पठन

 * Kathleen Jensen and Niklaus Wirth: PASCAL - User Manual and Report. Springer-Verlag, 1974, 1985, 1991, ISBN 3-540-97649-3 https://web.archive.org/web/20050314152247/http://www.cs.inf.ethz.ch/~wirth/books/Pascal/]
 * Brian Kernighan, Dennis Ritchie: The C Programming Language. Also called K&R – the original book on C.
 * 1st, Prentice Hall 1978; ISBN 0-13-110163-3. Pre-ANSI C.
 * 2nd, Prentice Hall 1988; ISBN 0-13-110362-8. ANSI C.
 * Niklaus Wirth: Comment on a note on dynamic arrays in PASCAL 37-38, ACM SIGPLAN Notices, Volume 11, Issue 1, January 1976.
 * Niklaus Wirth: Recollections about the Development of Pascal. 333-342, ACM SIGPLAN Notices, Volume 28, Issue 3, March 1993.
 * ISO/IEC 9899. The official C:1999 standard, along with defect reports and a rationale.
 * Detailed analysis of converting C to Pascal
 * Alan R. Feuer, Narain H. Gehani: Comparison of the Programming Languages C and Pascal 73-92, ACM Computing Surveys, Volume 14, Issue 1, March 1982.
 * Comparing and Assessing Programming Languages: Ada, C and Pascal, Ed. by Alan R. Feuer and Narain Gehani, Prentice Hall, 1984. ISBN 0-13-154840-9
 * Scott Meyers: Effective C++, 2nd Ed., Addison-Wesley, 1998, ISBN 0-201-92488-9
 * Vincent Hayward: Compared anatomy of the programming languages Pascal and C 50-60, ACM SIGPLAN Notices, Volume 21, Issue 5, May 1986.
 * Pascal for C users in the FreePascal Compiler Wiki