2012-05-09 15 views
22

स्रोत लाइन की अधिकतम लंबाई क्या है कंपाइलर स्वीकार करने के लिए आवश्यक हैं? क्या यह सी ++ 11 में बदल गया? यदि हां, तो पुराना मूल्य क्या था?स्रोत लाइन लंबाई सीमा

मैं इस सवाल से पूछ रहा हूं क्योंकि मैं कुछ भारी प्रीप्रोसेसर वूडू कर रहा हूं (दुर्भाग्य से, टेम्पलेट्स इसे काट नहीं पाएंगे), और ऐसा करने से लाइनों को बहुत तेज़ी से बनाने की प्रवृत्ति है। मैं सुरक्षित पक्ष पर रहना चाहता हूं, इसलिए मुझे प्लेटफार्म वाई पर कंपाइलर एक्स की संभावना के बारे में चिंता करने की ज़रूरत नहीं होगी क्योंकि बहुत लंबी लाइनों के कारण मेरा कोड अस्वीकार कर रहा है।

+0

मैं यह जांचता हूं कि प्रीप्रोसेसर वूडू से बचने का कोई तरीका है या नहीं। यह एक कार्यान्वयन विस्तार –

+0

पर निर्भर होने की अपेक्षा अधिक संभावना है, मुझे नहीं लगता कि सी ++ कंपाइलर असीमित रेखा की लंबाई स्वीकार करना मुश्किल होगा, लेकिन फिर मैंने कभी लिखा नहीं है। –

+0

@stefanbachert: मैं इससे बच नहीं सकता, यह समस्या है। इसके अलावा, सवाल का मुद्दा यह जानना है कि कार्यान्वयन-परिभाषित भूमि कहां से शुरू होती है, ताकि मैं इसमें घूमने से बच सकूं। – Fanael

उत्तर

30

सी ++ 2003, अनुलग्नक बी, (जानकारीपूर्ण) कार्यान्वयन मात्रा (क्षमा करें, की जरूरत नहीं है सी ++ 2011 काम)

2) सीमा मात्रा है कि उन वर्णित शामिल विवश कर सकते हैं नीचे या दूसरों। प्रत्येक मात्रा के बाद ब्रैकेट किए गए नंबर को उस मात्रा के लिए न्यूनतम के रूप में अनुशंसित किया जाता है। हालांकि, ये मात्रा केवल दिशानिर्देश हैं और अनुपालन निर्धारित नहीं करते हैं।

...

  • एक तार्किक स्रोत लाइन में वर्ण [65 536]।

आप इन के बारे में पूछना नहीं किया, लेकिन वे भी उपयोगी हो सकता है,: एक पूर्ण अभिव्यक्ति [256] के भीतर parenthesized अभिव्यक्ति की

  • नेस्टिंग स्तरों।
  • एक अनुवाद इकाई [65 536] में एक साथ मैक्रो पहचानकर्ता परिभाषित किया गया।
  • एक मैक्रो आमंत्रण में तर्क [256]।
  • आंतरिक पहचानकर्ता या मैक्रो नाम [1 024] में वर्णों की संख्या।
  • एक अनुवाद इकाई [65 536] में एक साथ मैक्रो पहचानकर्ता परिभाषित किया गया।
  • एक मैक्रो परिभाषा [256] में पैरामीटर्स।


पोस्टस्क्रिप्ट: यह ध्यान देने योग्य है कि "एक तार्किक स्रोत लाइन" है लायक है।

  • शारीरिक स्रोत फ़ाइल पात्रों
  • Trigraph दृश्यों (2 सेट बुनियादी स्रोत चरित्र पर मैप किए जाते हैं: एक तार्किक स्रोत लाइन तुम्हारे पास क्या है के बाद है।3) इसी एकल चरित्र आंतरिक अभ्यावेदन
  • एक नई लाइन चरित्र के प्रत्येक उदाहरण और एक तुरंत पूर्ववर्ती बैकस्लैश चरित्र हटा दी जाती है

तार्किक स्रोत रेखा ने ले ली है क्या आप से पहले है:

  • स्रोत फ़ाइल preprocessing टोकन
  • preprocessing घ में विघटित किया जाता है अप्रत्यक्ष निष्पादित किए जाते हैं और मैक्रो इनवॉक्शंस का विस्तार किया जाता है।

[सी ++ 2003 से उद्धरण, अनुवाद के 2.1 के चरण]

तो, अगर ओपी की चिंता है कि मैक्रो एक उचित लाइन की लंबाई से परे का विस्तार है, मेरा उत्तर अप्रासंगिक है। यदि ओपी की चिंता यह है कि उसका स्रोत कोड (\, \n से निपटने के बाद) बहुत लंबा हो सकता है, मेरा जवाब खड़ा है।

+7

बस पुष्टि करने के लिए, यह सी ++ 11 में समान है। –

+3

+1: यह सी ++ 11 में नमूना है: "- एक तार्किक स्रोत रेखा में वर्ण [65 536]।" अनुलग्नक बी.2 –

+0

बस यह कहने के लिए: एक कंपाइलर को बहुत लंबी लाइनों के कारण सामान्य "हैलो वर्ल्ड" कोड वाली फ़ाइल को अस्वीकार करने (या कुछ और करने) की अनुमति है। तब यह अपरिभाषित व्यवहार है। मुझे आश्चर्य है कि "लंबी लाइनों" सीमा का उल्लंघन करने के परिणामों के बारे में आपके उत्तर में आपके पास कोई स्पष्ट बयान क्यों नहीं है ... –

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