सी 11 मानक के अनुसार, फ़ंक्शन-जैसे मैक्रो के तर्क में शुरुआत में या इसके प्रीप्रोकैसिंग टोकन अनुक्रम के अंत में व्हाइटस्पेस हो सकता है। सामान्य प्रतिस्थापन के लिए, इस तरह के रिक्त स्थान पर कोई प्रभाव नहीं पड़ता है। स्ट्रिंगफिकेशन के लिए, 6.10.3.2.2सी preprocessor मैक्रो तर्क समाप्ति के लिए अंत में अंतरिक्ष के साथ?
पहले प्रीप्रोकैसिंग टोकन से पहले व्हाइट स्पेस और तर्क को लिखने वाले अंतिम प्रीप्रोकैसिंग टोकन के बाद रिक्त स्थान को अनदेखा किया जाना चाहिए।
(जो मेरा मानना है कि यह भी। एक सबूत साबित तर्क इसके चारों ओर रिक्त स्थान हो सकता है है) और सवाल तर्क है कि ## ऑपरेटर द्वारा श्रेणीबद्ध किया जाएगा, इसके बारे में क्या कर रिक्त स्थान संकलक चाहिए क्या है?
मैंने इसे वीसी ++ के साथ करने की कोशिश की, जो केवल रिक्त स्थान को अनदेखा करता है।
मुझे लगता है कि कंपाइलर को व्हाइटस्पेस के साथ संयोजन करना चाहिए। इससे अमान्य टोकन हो सकता है, उदाहरण के लिए, पहचानकर्ता एबीसी द्वारा गठित "एबीसी" और पहले टोकन के रूप में एक सफेद स्थान के साथ एक तर्क। मानक के अनुसार, यदि इस तरह से एक अवैध टोकन बनता है, तो व्यवहार अपरिभाषित होता है।
तो वीसी ++ ने पहले उल्लेख किए अनुसार क्या किया है, क्या यह केवल अंतरिक्ष को अनदेखा व्यवहार के परिणाम या अनदेखा करने का नतीजा है?
मैं देखता हूं। अपने जवाब के लिए आपको बहुत बहुत धन्यवाद। लेकिन मुझे आश्चर्य है, अगर कंपाइलर में अपने तर्क के प्रीप्रोकैसिंग टोकन अनुक्रम में श्वेत स्थान शामिल नहीं है, तो यह स्ट्रिंगफिकेशन कैसे करेगा? मेरा मतलब है, यह कैसे पता होना चाहिए कि आसन्न प्रीप्रोकैसिंग टोकन के बीच सफेद जगह कहां रखना है और कहां नहीं। मुझे लगता है कि यह न केवल टोकन अनुक्रम रिकॉर्ड करता है बल्कि सफेद रिक्त स्थान के बारे में भी जानकारी देता है? इसके बारे में मानक क्या कहता है? –
@WuZhenwei, आप सही हैं कि स्ट्रिंगिफिकेशन प्रीप्रोकैसिंग टोकन के बीच व्हाइटस्पेस नहीं डालता है जहां स्रोत वर्ण अनुक्रम में कोई भी नहीं है। चूंकि प्रीप्रोसेसर परवाह नहीं है * कितने * व्हाइटस्पेस है या विशिष्ट जगहों के स्पेस ऐसे स्थानों में क्या हैं, यह टोकन-बाय-टोकन आधार पर ट्रैक कर सकता है कि टोकन पहले से हैं और/या व्हाइटस्पेस के बाद हैं। यह एक कार्यान्वयन विस्तार है। मैं स्पष्टीकरण के लिए अपना जवाब अपडेट करूंगा। –