2010-10-05 10 views
5

मैं एक अजीब उत्पादन मिल गया था जब मैं बहुत सरल तरीके से निम्नलिखित लाइनों लिखें:प्रिंट ?? तथा !! अलग क्रम में विभिन्न उत्पादन दिखाएगा

कोड:

printf("LOL??!\n"); 
printf("LOL!!?\n"); 

आउटपुट: alt text

यह भी होता है कोड एमबीसीएस और यूनिकोड दोनों के तहत संकलित किया गया है।

उत्पादन के अनुक्रम पर भिन्न होता है "?" और "!" ...

कोई विचार?

+0

नीचे समझाया गया: प्रश्न चिह्नों में से किसी एक से बचने के लिए। –

+3

ट्रिग्राफ का सबसे अच्छा हिस्सा यह है कि यदि आप नहीं जानते कि उन्हें क्या कहा जाता है, तो उन्हें खोजना असंभव है। :-) ("??" के बारे में पूछे जाने पर Google बहुत उपयोगी नहीं है) –

+0

@JamesMcNellis '??!' के लिए एक खोज पर [SymbolHound] (http://www.symbolhound.com/) मुझे यहाँ नेतृत्व :) –

उत्तर

5

आप कोशिश कर सकते हैं

printf("What?\?!\n"); 

कंप्यूटर प्रोग्रामिंग में, द्वि आलेख और trigraphs क्रमशः दो और तीन वर्णों के क्रम को जो प्रोग्रामिंग भाषा के बाद एक चरित्र के रूप में व्याख्या कर रहे हैं।

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

16

??!trigraph है जो | द्वारा प्रतिस्थापित किया जाता है।

एक नियम के रूप में, आप दो प्रश्न चिह्न वर्ण एक साथ कहीं भी एक स्रोत फ़ाइल में जगह कभी नहीं करना चाहिए।

+0

http://en.wikipedia.org/wiki/Digraphs_and_trigraphs – ereOn

+1

या कहीं और, उस बात के लिए। :) – jalf

+0

@jalf: मेरी इच्छा है कि एएनएसआई सी समिति ने आपके नियम का पालन किया था ... ;-) –

5

वे कहा जाता है Trigraph Sequences

??! कार्यक्षेत्र बार | के लिए trigraph अनुक्रम है।

C/C++ पूर्वप्रक्रमक trigraphs पहचानता है और उन्हें उनके समकक्ष चरित्र के साथ बदल देता है।
तो जब तक आपका कोड कंपाइलर द्वारा देखा जाता है, तब तक ट्रिग्राफ पहले ही बदल दिए जाते हैं।

# grepping in the source file: 
$ grep printf a.c  
    printf("foo: ??!"); 

# grepping the preprocessor output: 
$ gcc a.c -trigraphs -E | grep printf | grep foo 
    printf("foo: |"); 
+0

ये सभी उदाहरण तारों में हैं, लेकिन यह ध्यान दिया जाना चाहिए कि ट्रिगर प्रतिस्थापन ** हर जगह ** होता है, न केवल तारों में। –

4

?? ट्रिगर के रूप में जाना जाता है और इसके साथ बदल दिया गया है आउटपुट में इस link

2

की जाँच करें यह एक स्ट्रिंग लगातार एक विशेष अर्थ नहीं है कि में वर्णों की एक विशेष अनुक्रम है। एक ट्रिग्राफ को बुलाया गया जिसे वे मूल रूप से कार्यान्वित किए गए थे क्योंकि सभी टर्मिनलों ने कुछ पात्रों का समर्थन नहीं किया था।

+1

... आजकल, वे प्रोग्रामिंग को और अधिक रोचक बनाने के लिए लागू किए गए हैं।:) –

+0

@DevSolar: ??? आपकी टिप्पणी का क्या अर्थ है? – Hogan

+0

@Matteo: सच है। प्रोग्रामिंग डीफ दिलचस्प नहीं है। – Hogan

संबंधित मुद्दे