C ऑपरेटर/\ और \/क्या_did_ करते हैं?




compiler-construction operators (6)

कोई भी C में अपने आपरेटरों को "घोषित" कर सकता है .... यदि कोई C कंपाइलर गुरु है और C कंपाइलर का सोर्स कोड है! ;-)

पहेली के लिए और प्रश्न:

  1. C99 में ये ऑपरेशन कैसे किए जाते हैं? जीसीसी? ...
  2. और / \ / \ / क्यों गिराए गए थे?
  3. कौन से प्रकार / \ और \ / ऑपरेटरों के लिए मान्य थे?

"/ \ \" के लिए Googling स्वाभाविक रूप से कुछ भी नहीं देता है। विकिपीडिया में न तो के लिए एक पेज है / न ही \ / / के लिए। लेकिन मैं फार्म देखा है इसी तरह के ऑपरेटरों XML चरित्र संस्थाओं में बनाया जाता है!

स्रोत जोड़ा गया: मुझे पीडीपी की cc स्रोत फ़ाइल "c00.c" में आपत्तिजनक उदाहरण मिला:

/*
 * Return the next symbol from the input.
 * peeksym is a pushed-back symbol, peekc is a pushed-back
 * character (after peeksym).
 * mosflg means that the next symbol, if an identifier,
 * is a member of structure or a structure tag or an enum tag
 */
symbol()
{
...
 case BSLASH:
  if (subseq('/', 0, 1))
   return(MAX);
  goto unkn;

 case DIVIDE:
  if (subseq('\\', 0, 1))
   return(MIN);
  if (subseq('*',1,0))
   return(DIVIDE);
...
}

वास्तविक कार्यान्वयन: छठे संस्करण यूनिक्स 1975 (अब तक) के रूप में / \ और \ / ऑपरेटरों वापस तारीख। उदाहरण: यूनिक्स V6 (1975), यूनिक्स V7 (1979) और वर्तमान में BSD 2.11 (1992- 2008 )


अटकलें!

यदि आपके पास उनके आसपास जगह है, तो:

a /\ b   ===>   a / b

a \/ b   ===>   a / b

लॉजिक: प्रीप्रोसेसिंग चरण में बैकस्लैश और एक चरित्र के साथ व्यवहार करना पड़ता है, और बैकस्लैश-स्पेस को अंतरिक्ष के रूप में व्यवहार करने की संभावना है, और बैकस्लैश-स्लैश को स्लैश के रूप में माना जाता है।

उस ने कहा, दोनों SUN C कंपाइलर (संस्करण 12) और GNU C कंपाइलर (संस्करण 4.4) बैकस्लैश वाले कोड को अस्वीकार करते हैं। लेकिन मैं आसानी से विश्वास कर सकता था कि पुराने, पूर्व-मानक सी प्रीप्रोसेसर इसके बारे में कम सावधान थे।

मानकों का अनुपालन

ऑपरेटर कभी भी सी के आधिकारिक संस्करण का हिस्सा नहीं रहे हैं।

इसके अलावा, मानक मुझे दी गई व्याख्या की अनुमति नहीं देगा (धारा 5.1.1.2 अनुवाद चरण C89 और C99 दोनों में) - लेकिन गैर-मानक संकलक मानक द्वारा विवश नहीं हैं, निश्चित रूप से।

स्रोत पोस्ट किए जाने के बाद जोड़ा गया:

दिलचस्प! तो यह ' a = b /\ c; ' के लिए प्रशंसनीय लगता है a = b /\ c; 'बी और सी के अधिकतम को आवंटित करने के लिए, और' a = b \/ c; 'न्यूनतम करने के लिए (या, जैसा कि ग्रेग हेगिल ने बताया, अधिक संभावना है कि इसके विपरीत)। और, उन दिनों में, यह संभव था कि आधुनिक ' += ' संचालक अभी भी ' =+ ' के रूप में लिखे गए थे और वास्तव में दो टोकन थे ( इस दावे के लिए कोई समर्थन सबूत नहीं; फिर से स्मृति विफल; ), इसलिए काल्पनिक ' a =/\ b; ' a =/\ b; '(या, आधुनिक संकेतन में,' a /\= b; ') अधिकतम-असाइनमेंट ऑपरेटर होगा, आदि।

यह मेरे साथ भी होता है कि थॉम्पसन का एसीएम ट्यूरिंग अवार्ड भाषण ' रिफ्लेक्शन ऑन ट्रस्टिंग ट्रस्ट ' किसी तरह प्रासंगिक है।


C के पास ऐसे ऑपरेटर कभी नहीं थे।

आमतौर पर / कुछ स्ट्रिंग सिस्टम में एक एस्केप कोड होगा, यह सुनिश्चित नहीं होता है कि / \ का कभी कोई अर्थ है।


कैरट ( ^ ) एक बिटवाइज़ एक्सक्लूसिव या करता है।

मुझे विश्वास नहीं होता कि एक "वी" ऑपरेटर है। वह whole V ’अक्षर है (या ऐसा कुछ जो पूरी तरह से एक बहुत की तरह दिखता है)। कोई ऐसा वैरिएबल नाम देना चाहता है जो।


मुझे शक है कि वे कभी भी कुछ भी मतलब था। अगर उन्होंने कभी किया, तो यह बहुत पहले था। मुझे पता है कि केवल प्रमुख ऑपरेटरों को C से हटा दिया गया था = + और = -, जो + = और - = के लिए प्रारंभिक पर्यायवाची थे। आप साक्ष्य के लिए DMR के प्राइमरी C पेज को देखना चाह सकते हैं।


मैं यह अनुमान लगाने जा रहा हूं कि ये औपचारिक प्रतीकात्मक तर्क का संदर्भ हैं:

http://en.wikipedia.org/wiki/Table_of_logic_symbols

/ का उपयोग अव्यवस्था को निरूपित करने के लिए किया जाता है (या) / \ का उपयोग संयोजन (और) को दर्शाने के लिए किया जाता है


\/ sup की तरह दिखता है और /\ inf जैसा दिखता है। वे क्रमशः could और भी हो सकते हैं।

मुझे याद नहीं है कि ये कभी भी K & R 2nd Edition या किसी अन्य C बुक में देखते हैं।





algol