जैसा कि पहले ही कहा गया है ??!??!
कि अनिवार्य रूप से दो ट्रिग्राफ ( ??!
और ??!
फिर से) एक साथ फंसे हुए होते हैं , जिन्हें प्रीप्रोसेसर द्वारा प्रतिस्थापित किया जाता है- ||
अर्थात तार्किक या , तार्किक या ।
निम्न प्रत्येक ट्रिग्राफ वाली तालिका को वैकल्पिक ट्रिग्राफ संयोजनों को खंडित करने में मदद करनी चाहिए:
Trigraph Replaces
??( [
??) ]
??< {
??> }
??/ \
??' ^
??= #
??! |
??- ~
स्रोत: सी: एक संदर्भ मैनुअल 5 वें संस्करण
तो ऐसा ट्रिग्राफ जो दिखता है, ??(??)
आखिरकार मैप कर लेगा []
, ??(??)??(??)
इसकी जगह ले लेगा , [][]
और आपको इसका आइडिया मिल जाएगा।
चूंकि ट्रिग्राफ को प्रीप्रोसेसिंग के दौरान प्रतिस्थापित किया जाता है इसलिए आप cpp
एक मूर्खतापूर्ण trigr.c
प्रोग्राम का उपयोग करके, आउटपुट का एक दृश्य प्राप्त करने के लिए उपयोग कर सकते हैं :
void main(){ const char *s = "??!??!"; }
और इसके साथ प्रसंस्करण:
cpp -trigraphs trigr.c
आपको एक कंसोल आउटपुट मिलेगा
void main(){ const char *s = "||"; }
जैसा कि आप देख सकते हैं, विकल्प -trigraphs
निर्दिष्ट होना चाहिए या फिर cpp
एक चेतावनी जारी करेगा; यह इंगित करता है कि ट्रिग्राफ अतीत की बात है और उन लोगों को भ्रमित करने के अलावा कोई आधुनिक मूल्य नहीं है जो उन्हें टक्कर दे सकते हैं ।
Trigraphs की शुरूआत के पीछे तर्क का सवाल है, यह बेहतर समझा जाता है जब पर देख रहे हैं आईएसओ / आईईसी 646 के इतिहास अनुभाग :
आईएसओ / IEC 646 और इसके पूर्ववर्ती ASCII (ANSI X3.4) ने दूरसंचार उद्योग में चरित्र एनकोडिंग के बारे में मौजूदा अभ्यास का समर्थन किया है।
जैसा कि एएससीआईआई ने अंग्रेजी के अलावा अन्य भाषाओं के लिए आवश्यक कई वर्ण प्रदान नहीं किए हैं, कई राष्ट्रीय वेरिएंट बनाए गए थे जिन्होंने कुछ कम-उपयोग किए गए पात्रों को आवश्यक लोगों के साथ प्रतिस्थापित किया ।
(जोर मेरा)
तो, संक्षेप में, कुछ आवश्यक पात्रों (जिनके लिए एक ट्रिग्राफ मौजूद है) को कुछ राष्ट्रीय वेरिएंट में बदल दिया गया था। यह वैकल्पिक वर्णों का उपयोग करता है, जिसमें अन्य वर्ण अभी भी आसपास मौजूद वर्णों का उपयोग करते हैं।
!ErrorHasOccurred() ??!???! HandleError();
संकलन की उम्मीद कैसे करते हैं ? वह है??!
???
!
। बात साबित होती है?