मुझे प्रीप्रोसेसर के साथ एक छोटी सी समस्या है जो मुझे पहेली करता है और मुझे दस्तावेज़ीकरण/प्रीप्रोसेसर/भाषा स्पेक में कोई स्पष्टीकरण नहीं मिल रहा है। ,सी/सी ++ प्रीप्रोसेसर यहां एक जगह क्यों जोड़ रहा है?
aaa bbb <--- why is space added here
aaa.bbb
trigraphs से निपटने के बाद लाइनों और टिप्पणियों को जारी रखा, पूर्वप्रक्रमक पूर्वप्रक्रमक निर्देशों पर काम करता है और पूर्व प्रसंस्करण टोकन और रिक्त स्थान को में इनपुट विभाजित करता है:
#define booboo() aaa
booboo()bbb
booboo().bbb
में preprocessed है। Booboo की प्रतिस्थापन सूची में एक पीपी-टोकन शामिल है जो 'aaa' पहचानकर्ता है। booboo() बीबीबी पीपी-टोकन में बांटा गया है: 'बूबू', '(', ')', 'बीबीबी'। 'बूबू', '(', ')' का अनुक्रम कार्यात्मक मैक्रो आमंत्रण के रूप में पहचाना जाता है और इसे 'aaa' में विस्तारित किया जाना चाहिए और आउटपुट में इमो को 'aaabbb' जैसा दिखना चाहिए। मैंने कहा - मानव की तरह दिखते हैं - यह एक टोकन जैसा दिखता है जबकि कंपाइलर को 2 टोकन 'एएए' और 'बीबीबी' मिलेगा क्योंकि कोई '##' ऑपरेटर इस्तेमाल नहीं किया गया था जो पीपी-टोकन कॉन्सटेनेशन की अनुमति देता है। क्यों/कौन सा नियम सीपीपी (सी प्रीप्रोसेसर) को 'aaa' और 'bbb' के बीच अतिरिक्त स्थान देता है जब 'boaoo()। Bbb' 'aaa.bbb' में बिना अंतरिक्ष के परिणाम?
ऐसा इसलिए है क्योंकि सीपीपी उत्पादन करने की कोशिश करता है (जो ज्यादातर मनुष्यों के लिए है) असंबद्ध? मानव यह बताने में सक्षम नहीं है कि 'aaabbb' 2 टोकन से बना है क्योंकि यह केवल टोकन की वर्तनी को देखता है। क्या मैं सही हू? मैंने सीपीपी के लिए प्रीप्रोसेसर और जीसीसी के दस्तावेज के बारे में सी 99 दस्तावेज पढ़ा है। मुझे इसके बारे में कुछ नहीं दिख रहा है।
#define baba() +
baba()+
baba()-
परिणामों में:
अगर मैं सही हूँ हम यहाँ ऐसी ही स्थिति है
+ +
+-
अन्यथा (यदि '++' उत्पादन होता है) यह कैसा 'एक मानव देने का प्रयास करेगा ++ 'टोकन लेकिन 2 टोकन' + 'और' + 'होगा। क्या यह '##' ऑपरेटर के साथ है कि सीपीपी जांच करता है कि क्या संगतता वैध टोकन उत्पन्न करती है लेकिन दिखाए गए मामलों में मानव को रोकना है कि कंसटेनेशन किया गया था? '+ -' संदिग्ध नहीं है इसलिए
यह ध्यान देने योग्य है: सी मानक उपकरण के बारे में कुछ नहीं कहता है जो संकलन प्रक्रिया के माध्यम से आधे रास्ते को रोकता है। – o11c
संबंधित (संभावित डुप्ली): [मैक का कोई सीकेपी विस्तार बिना टोकन-स्ट्रिंग के साथ] (http://stackoverflow.com/questions/30813619/cpp-expansion-of-macro-with-no-token-string/30813841#30813841) –
ध्यान दें कि अक्सर रिक्ति सी या सी ++ में कोई फर्क नहीं पड़ता। – MicroVirus