वास्तव में नहीं। सी मानक अनुवाद इकाइयों पर कोई पूर्ण न्यूनतम सीमा निर्धारित नहीं करता है जिसे स्वीकार किया जाना चाहिए। जैसे, एक पूरी तरह से सही चेकर व्यवहार में लिखने के लिए तुच्छ है, लेकिन पूरी तरह से बेकार हो सकता है:
#include <stdio.h>
int main(int argc, char **argv) {
int i;
for (i=1; i<argc; i++)
fprintf(stderr, "`%s`: Translation limit (potentially) exceeded.\n", argv[i]);
return 0;
}
हाँ, यह कोई फर्क नहीं पड़ता कि कैसे को खारिज कर दिया सब कुछ, तुच्छ। यह मानक के अनुसार है। जैसा कि मैंने कहा, यह अभ्यास में पूरी तरह से बेकार है। दुर्भाग्यवश, आप वास्तव में बहुत कुछ बेहतर नहीं कर सकते - जब आप एक अलग कार्यान्वयन के लिए बंदरगाह का निर्णय लेते हैं, तो आप कुछ विषम संसाधन सीमा में भाग सकते हैं जिसे आपने कभी नहीं देखा है, इसलिए आपके द्वारा लिखे गए किसी भी कोड (जिसमें " हैलो वर्ल्ड ") बहुत कम सिस्टम के लिए दर्जनों या यहां तक कि सैकड़ों कंपाइलरों द्वारा अनुमत होने के बावजूद संसाधन संसाधन से अधिक हो सकता है।
संपादित करें:
क्यों एक "हैलो दुनिया" कार्यक्रम का कड़ाई अनुरूप नहीं है
सबसे पहले, यह है लायक फिर से बताते हुए की "कड़ाई अनुरूप" परिभाषा: "एक सख्ती अनुरूप कार्यक्रम के लिए केवल उन का उपयोग करेगा इस अंतर्राष्ट्रीय मानक में निर्दिष्ट भाषा और पुस्तकालय की विशेषताएं 2. यह किसी भी निर्दिष्ट, अपरिभाषित, या कार्यान्वयन-परिभाषित व्यवहार पर निर्भर उत्पादन का उत्पादन नहीं करेगी, और न्यूनतम कार्यान्वयन सीमा से अधिक नहीं होगी। "
वास्तव में संख्या कारणों से "हैलो, वर्ल्ड" सख्ती से अनुरूप नहीं है। सबसे पहले, जैसा कि ऊपर बताया गया है, कार्यान्वयन सीमाओं के लिए न्यूनतम आवश्यकताओं पूरी तरह से अर्थहीन हैं - हालांकि कुछ प्रोग्राम होना चाहिए जो स्वीकार की जाने वाली कुछ सीमाओं को पूरा करता है, नहीं अन्य कार्यक्रम को स्वीकार किया जाना चाहिए, भले ही यह ' टी भी उन सीमाओं के करीब आते हैं। जिस तरह से आवश्यकता बताई गई है, उसे देखते हुए, यह प्रश्न (खुले में) के लिए खुला है कि क्या ऐसी कोई ऐसी चीज है जो किसी भी न्यूनतम कार्यान्वयन सीमा से अधिक न हो, क्योंकि मानक वास्तव में न्यूनतम कार्यान्वयन सीमा को परिभाषित नहीं करता है।
दूसरा, अनुवाद के चरण 1 के दौरान: "स्रोत स्रोत फ़ाइल में कार्यान्वयन परिभाषित तरीके से, भौतिक स्रोत फ़ाइल मल्टीबाइट वर्ण मैप किए जाते हैं ..." (§5.1.1.2/1)। चूंकि "हैलो, वर्ल्ड!" (या जो भी संस्करण आप पसंद करते हैं) स्रोत फ़ाइल में एक स्ट्रिंग अक्षर के रूप में आपूर्ति की जाती है, इसे स्रोत चरित्र सेट में कार्यान्वयन-परिभाषित तरीके से मैप किया जा सकता है। एक कार्यान्वयन यह तय करने के लिए स्वतंत्र है कि (एक बेवकूफ उदाहरण के लिए) स्ट्रिंग अक्षर आरओटी 13 एन्कोड किया जाएगा, और जब तक कि तथ्य ठीक से दस्तावेज किया गया हो, यह पूरी तरह से वैध है।
तीसरा, आउटपुट आमतौर पर stdout
के माध्यम से लिखा जाता है। stdout
एक टेक्स्ट स्ट्रीम है। मानक के मुताबिक: "मेजबान पर्यावरण में पाठ का प्रतिनिधित्व करने के लिए अलग-अलग सम्मेलनों के अनुरूप अक्षरों को इनपुट, आउटपुट में जोड़ा, परिवर्तित या हटा दिया जाना चाहिए। इस प्रकार, पात्रों के बीच एक-एक-एक पत्राचार की आवश्यकता नहीं है एक धारा में और बाहरी प्रतिनिधित्व में उन लोगों में। " (§7.19.2/2) इस तरह, एक कार्यान्वयन (उदाहरण के लिए) आउटपुट (सोमवार, बुधवार, या शुक्रवार को) पर हफमैन संपीड़न कर सकता है।
तो, हमारे पास (कम से कम) तीन अलग-अलग बिंदु हैं जिन पर आउटपुट "हैलो, वर्ल्ड!" कार्यान्वयन-परिभाषित विशेषताओं पर निर्भर करता है - इनमें से कोई भी सख्ती से अनुरूप कार्यक्रम की परिभाषा को फिट करने से रोक देगा।
आपका उदाहरण शानदार है। मैंने कभी इतना आसान सूचक अभिव्यक्तियों के बारे में सोचा नहीं है। मेरा मानना था कि इस तरह की अनिर्धारित स्थिति को पार्स-टाइम पर देखा जा सकता है। – alecov
आपका उदाहरण वास्तव में ठीक है, भले ही 'p == q' - शायद आपका मतलब' * p = (* q) ++ 'है, जो 'p == q' अगर अपरिभाषित है? – caf