C Language
मल्टी-कैरेक्टर कैरेक्टर सीक्वेंस
खोज…
टिप्पणियों
सभी पूर्वप्रक्रमक ट्रिगर अनुक्रम प्रसंस्करण का समर्थन नहीं करते हैं। कुछ संकलक एक अतिरिक्त विकल्प देते हैं या उन्हें संसाधित करने के लिए स्विच करते हैं। अन्य लोग ट्रिग्राफ को परिवर्तित करने के लिए एक अलग प्रोग्राम का उपयोग करते हैं।
GCC कंपाइलर उन्हें तब तक नहीं पहचानता जब तक आप स्पष्ट रूप से ऐसा करने का अनुरोध नहीं करते ( -trigraphs
को सक्षम करने के लिए उपयोग करें; -Wtrigraphs
, -Wtrigraphs
हिस्सा, -Wall
बारे में चेतावनी प्राप्त करने के लिए)।
जैसा कि आज उपयोग किए जाने वाले अधिकांश प्लेटफ़ॉर्म सी में इस्तेमाल किए गए एकल वर्णों की पूरी श्रृंखला का समर्थन करते हैं, डिग्राफ को ट्रिग्राफ पर पसंद किया जाता है, लेकिन किसी भी मल्टी-कैरेक्टर वर्ण अनुक्रम का उपयोग आमतौर पर हतोत्साहित किया जाता है।
इसके अलावा, आकस्मिक ट्रिग्रेड उपयोग से सावधान रहें ( puts("What happened??!!");
उदाहरण के लिए)।
Trigraphs
प्रतीकों [ ] { } ^ \ | ~ #
अक्सर C कार्यक्रमों में उपयोग किया जाता है, लेकिन 1980 के दशक के उत्तरार्ध में, कोड सेट उपयोग में थे (आईएसओ 646 वेरिएंट, उदाहरण के लिए, स्कैंडिनेवियाई देशों में) जहां इन के लिए ASCII चरित्र पदों का उपयोग राष्ट्रीय भाषा संस्करण वर्णों के लिए किया गया था (जैसे £
के लिए #
ब्रिटेन में; Æ Å æ å ø Ø
के लिए { } { } | \
डेनमार्क में, वहाँ कोई था ~
EBCDIC में)। इसका मतलब यह था कि इन सेटों का उपयोग करने वाली मशीनों पर C कोड लिखना कठिन था।
इस समस्या को हल करने के लिए, सी मानक ने तीन वर्णों के संयोजन का उपयोग करने का सुझाव दिया, एक एकल वर्ण को एक ट्रिग्राफ कहा जाता है। ट्रिग्राफ तीन वर्णों का एक क्रम है, जिनमें से पहले दो प्रश्न चिह्न हैं।
निम्नलिखित एक सरल उदाहरण है जो #
, {
और }
बजाय ट्रिग्राफ अनुक्रमों का उपयोग करता है:
??=include <stdio.h>
int main()
??<
printf("Hello World!\n");
??>
यह सी प्रीप्रोसेसर द्वारा उनके एकल-वर्ण समकक्षों के साथ ट्रिगर को बदलकर बदल दिया जाएगा जैसे कि कोड कहा गया है:
#include <stdio.h>
int main()
{
printf("Hello World!\n");
}
Trigraph | समतुल्य |
---|---|
?? = | # |
?? / | \ |
?? ' | ^ |
?? ( | [ |
??) | ] |
??! | | |
?? < | { |
??> | } |
?? - | ~ |
ध्यान दें कि ट्रिग्राफ समस्याग्रस्त हैं क्योंकि, उदाहरण के लिए, ??/
एक बैकस्लैश है और टिप्पणियों में निरंतरता लाइनों के अर्थ को प्रभावित कर सकता है, और तार और चरित्र शाब्दिक (जैसे '??/??/'
एक के अंदर पहचाना जाना चाहिए '??/??/'
चरित्र, एक बैकस्लैश)।
द्वि आलेख
1994 में ट्रिग्राफ में से पाँच के लिए अधिक पठनीय विकल्प की आपूर्ति की गई थी। ये केवल दो वर्णों का उपयोग करते हैं और इन्हें डिग्राफ के रूप में जाना जाता है। ट्रिग्राफ के विपरीत, डिग्राफ टोकन हैं। अगर एक डिग्राफ दूसरे टोकन में होता है (जैसे स्ट्रिंग शाब्दिक या वर्ण स्थिरांक) तो इसे डिग्राफ के रूप में नहीं माना जाएगा, लेकिन जैसा है वैसा ही रहेगा।
निम्नलिखित digraphs अनुक्रम प्रसंस्करण से पहले और बाद में अंतर दिखाता है।
#include <stdio.h>
int main()
<%
printf("Hello %> World!\n"); /* Note that the string contains a digraph */
%>
जो के रूप में ही इलाज किया जाएगा:
#include <stdio.h>
int main()
{
printf("Hello %> World!\n"); /* Note the unchanged digraph within the string. */
}
संयुक्ताक्षर | समतुल्य |
---|---|
<: | [ |
:> | ] |
<% | { |
%> | } |
%: | # |