आपके प्रश्न का उत्तर इस बात पर निर्भर करता है कि वह किस सी भाषा के बारे में पूछ रहा है।
डेनिस रिची की 1974 सी रेफरेंस मैनुअल में वर्णित भाषा एक निम्न-स्तरीय भाषा थी, जो उच्च-स्तरीय भाषाओं की कुछ प्रोग्रामिंग सुविधा प्रदान करती थी। उस भाषा से ली गई बोलियाँ निम्न स्तर की प्रोग्रामिंग भाषाएँ हैं।
जब 1989/1990 सी मानक प्रकाशित किया गया था, हालांकि, इसने निम्न-स्तरीय भाषा का वर्णन नहीं किया था जो वास्तविक मशीनों की प्रोग्रामिंग के लिए लोकप्रिय हो गया था, लेकिन इसके बजाय एक उच्च-स्तरीय भाषा का वर्णन किया गया था - लेकिन होना आवश्यक नहीं था- -निचले स्तर की शर्तों में लागू किया गया।
सी स्टैंडर्ड नोट के लेखकों के रूप में, भाषा को उपयोगी बनाने वाली चीजों में से एक यह थी कि कई कार्यान्वयन को उच्च-स्तरीय असेंबलरों के रूप में माना जा सकता है। चूँकि C को अन्य उच्च-स्तरीय भाषाओं के विकल्प के रूप में भी उपयोग किया गया था, और क्योंकि कई अनुप्रयोगों को उन चीजों को करने की क्षमता की आवश्यकता नहीं थी जो उच्च-स्तरीय भाषाएं नहीं कर सकती थीं, मानक के लेखकों ने कार्यान्वयन को मनमाने ढंग से व्यवहार करने की अनुमति दी थी यदि प्रोग्राम निम्न-स्तरीय निर्माणों का उपयोग करने का प्रयास करते हैं। नतीजतन, सी स्टैंडर्ड द्वारा वर्णित भाषा कभी भी निम्न स्तर की प्रोग्रामिंग भाषा नहीं रही है।
इस अंतर को समझने के लिए, विचार करें कि रिची की भाषा और C89 कोड स्निपेट कैसे देखेगा:
struct foo { int x,y; float z; } *p;
...
p[3].y+=1;
एक ऐसे मंच पर जहाँ "char" 8 बिट्स है, "int" 16 बिट्स बिग-एंडियन है, "फ्लोट" 32 बिट्स है, और स्ट्रक्चर्स की कोई विशेष पैडिंग या संरेखण आवश्यकताओं नहीं है, इसलिए "स्ट्रक्चर फू" का आकार 8 बाइट्स है।
रिची की भाषा पर, अंतिम विवरण का व्यवहार "पी" में संग्रहीत पते को ले जाएगा, इसमें 3 * 8 + 2 [यानी 26] बाइट्स जोड़ें, और उस पते पर बाइट्स से 16-बिट मान प्राप्त करें और अगला , उस मूल्य में एक जोड़ें, और फिर उसी दो बाइट्स के लिए 16 बिट मान वापस लिखें। व्यवहार को 26 वें और 27 वें बाइट्स पर अभिनय के रूप में परिभाषित किया जाएगा, जो पता पी पर किसी भी वस्तु के लिए किस प्रकार का संग्रह किए बिना निम्नलिखित था।
सी स्टैंडर्ड द्वारा परिभाषित भाषा में, इस घटना में कि * p एक "स्ट्रक्चर फू [[] के एक तत्व की पहचान करता है, जिसका अनुसरण उस प्रकार के कम से कम तीन और पूर्ण तत्वों द्वारा किया जाता है, अंतिम विवरण एक सदस्य को y के बदले में जोड़ देगा के बाद तीसरा तत्व * पी। किसी भी अन्य परिस्थिति में व्यवहार मानक द्वारा परिभाषित नहीं किया जाएगा।
रिची की भाषा एक निम्न-स्तरीय प्रोग्रामिंग भाषा थी क्योंकि, जब यह एक प्रोग्रामर को एरोसेज और संरचनाओं जैसे अमूर्त का उपयोग करने की अनुमति देता है जब सुविधाजनक होता है, तो यह स्मृति में वस्तुओं के अंतर्निहित लेआउट के संदर्भ में व्यवहार को परिभाषित करता है। इसके विपरीत, C89 और बाद के मानकों द्वारा वर्णित भाषा एक उच्च-स्तरीय अमूर्तता के संदर्भ में चीजों को परिभाषित करती है, और केवल उस कोड के व्यवहार को परिभाषित करती है जो इसके अनुरूप है। निम्न-स्तरीय प्रोग्रामिंग के लिए उपयुक्त गुणवत्ता कार्यान्वयन मानक से अधिक मामलों में उपयोगी व्यवहार करेगा, लेकिन ऐसे उद्देश्यों के लिए उपयुक्त होने के लिए कार्यान्वयन क्या करना चाहिए, यह निर्दिष्ट करने वाला कोई "आधिकारिक" दस्तावेज़ नहीं है।
डेनिस रिची द्वारा आविष्कार की गई सी भाषा इस प्रकार एक निम्न-स्तरीय भाषा है, और इस तरह से मान्यता प्राप्त थी। सी मानक समिति द्वारा आविष्कार की गई भाषा, हालांकि, कार्यान्वयन-प्रदान की गारंटी के अभाव में कभी भी निम्न स्तर की भाषा नहीं रही है जो कि मानक के आदेशों से परे है।