c programing सी क्या है ?? ?? ऑपरेटर करते हैं?




सी++ प्रोग्राम (4)

मैंने सी की एक रेखा देखी जो इस तरह दिखती थी:

!ErrorHasOccured() ??!??! HandleError();

यह सही ढंग से संकलित और ठीक चल रहा है लगता है। ऐसा लगता है कि यह जांच रहा है कि कोई त्रुटि आई है, और यदि यह है, तो यह इसे संभालता है। लेकिन मुझे सच में यकीन नहीं है कि यह वास्तव में क्या कर रहा है या यह कैसे कर रहा है। ऐसा लगता है कि प्रोग्रामर त्रुटियों के बारे में अपनी भावनाओं को व्यक्त करने की कोशिश कर रहा है।

मैंने कभी नहीं देखा है ??!??! किसी भी प्रोग्रामिंग भाषा से पहले, और मुझे इसके लिए कहीं भी दस्तावेज नहीं मिल रहा है। (Google खोज शब्द जैसे ??!??! ) में मदद नहीं करता है। यह क्या करता है और कोड नमूना कैसे काम करता है?


??! एक trigraph जो अनुवाद करता है | । तो यह कहता है:

!ErrorHasOccured() || HandleError();

जो, लघु सर्किटिंग के कारण, इसके बराबर है:

if (ErrorHasOccured())
    HandleError();

सप्ताह का गुरु (सी ++ से संबंधित है लेकिन यहां प्रासंगिक है), जहां मैंने इसे उठाया।

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

आईएसओ / आईईसी 98 99: 1 999 §5.2.1.1 से, फुटनोट 12 (एच / टी @ रैंडम 832):

ट्राग्राफ अनुक्रम उन वर्णों के इनपुट को सक्षम करते हैं जिन्हें आईएसओ / आईईसी 646 में वर्णित इनवेरिएंट कोड सेट में परिभाषित नहीं किया गया है, जो सात-बिट यूएस ASCII कोड सेट का सबसेट है।


खैर, यह सामान्य रूप से क्यों मौजूद है, यह संभव है कि यह आपके उदाहरण में क्यों मौजूद है।

यह सब आधे शताब्दी पहले हार्डकॉपी संचार टर्मिनलों को कंप्यूटर उपयोगकर्ता इंटरफेस के रूप में पुनर्निर्मित करने के साथ शुरू हुआ था। प्रारंभिक यूनिक्स और सी युग में एएसआर -33 टेलेट टाइप था।

यह डिवाइस धीमा था (10 सीपीएस) और शोर और बदसूरत और ASCII चरित्र सेट का उसका दृश्य 0x5f पर समाप्त हुआ, इसलिए यह था (तस्वीर पर बारीकी से देखो) कोई भी कुंजी नहीं:

{ | } ~ 

ट्रिग्राफ को एक विशिष्ट समस्या को ठीक करने के लिए परिभाषित किया गया था। विचार यह था कि सी प्रोग्राम एएसआरआई 33 पर पाए गए ASCII सबसेट का उपयोग कर सकते हैं और अन्य वातावरण में उच्च ASCII मानों को याद कर सकते हैं।

आपका उदाहरण वास्तव में दो है ??! , प्रत्येक अर्थ | , तो परिणाम ||

हालांकि, परिभाषा के अनुसार सी कोड लिखने वाले लोगों के पास आधुनिक उपकरण थे, 1 इसलिए मेरा अनुमान है: कोई व्यक्ति स्वयं को दिखा रहा है या खुद को मनोरंजक कर रहा है, जिससे आप ढूंढने के लिए कोड में ईस्टर अंडे छोड़ सकते हैं।

यह निश्चित रूप से काम करता है, यह एक बेहद लोकप्रिय SO सवाल का कारण बन गया।

एएसआर -33 टेलेट टाइप

1. उस मामले के लिए, ट्राइग्राफ का आविष्कार एएनएसआई कमेटी द्वारा किया गया था, जो पहले सी के बाद एक सफल सफलता बनने के बाद मिले थे, इसलिए मूल सी कोड या कोडर्स में से कोई भी उनका उपयोग नहीं करता था।


यह एक सी trigraph??! है | , तो ??!??! ऑपरेटर है ||


जैसा कि पहले से ही कहा गया है ??!??! अनिवार्य रूप से दो trigraphs ( ??! और ??! फिर से) एक साथ मिल गए हैं जिन्हें प्रतिस्थापित किया गया है || , यानी लॉजिकल या , प्रीप्रोसेसर द्वारा।

निम्नलिखित ट्रिग्राफ वाली निम्नलिखित छवि को वैकल्पिक ट्रिग्राफ संयोजनों को असंबद्ध करने में मदद करनी चाहिए:

( सी से ली गई छवि : एक संदर्भ मैनुअल 5 वां संस्करण )

तो एक ऐसा ट्रिगर जो दिखता है ??(??) अंततः मानचित्र [] , ??(??)??(??) को बदल देगा [][] और इसी तरह, आपको विचार मिल जाएगा।

चूंकि प्रीप्रोकैसिंग के दौरान ट्राग्राफ को प्रतिस्थापित किया जाता है, इसलिए आप एक मूर्खतापूर्ण trigr.c प्रोग्राम का उपयोग करके आउटपुट का दृश्य प्राप्त करने के लिए cpp का उपयोग कर सकते हैं:

void main(){ const char *s = "??!??!"; } 

और इसके साथ प्रसंस्करण:

cpp -trigraphs trigr.c 

आपको एक कंसोल आउटपुट मिलेगा

void main(){ const char *s = "||"; }

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

ट्रिग्राफ के परिचय के पीछे तर्क के लिए, ISO/IEC 646 के इतिहास खंड को देखते समय बेहतर समझ में आता है:

आईएसओ / आईईसी 646 और इसके पूर्ववर्ती ASCII (एएनएसआई एक्स 3.4) ने बड़े पैमाने पर दूरसंचार उद्योग में चरित्र एन्कोडिंग के संबंध में मौजूदा अभ्यास का समर्थन किया।

चूंकि एएससीआईआई ने अंग्रेजी के अलावा अन्य भाषाओं के लिए आवश्यक कई पात्रों को उपलब्ध नहीं कराया था, इसलिए कई राष्ट्रीय रूपों को बनाया गया था जो आवश्यक लोगों के साथ कुछ कम इस्तेमाल किए गए पात्रों को प्रतिस्थापित करते थे

(जोर मेरा)

तो, संक्षेप में, कुछ आवश्यक पात्रों (जिनके लिए एक ट्रिगर मौजूद है) कुछ राष्ट्रीय रूपों में प्रतिस्थापित किए गए थे। यह उन वर्णों से युक्त त्रिकोणों का उपयोग करके वैकल्पिक प्रतिनिधित्व का कारण बनता है जो अन्य प्रकारों के आसपास थे।





trigraphs