2016-09-15 4 views
13

सी स्टैंडर्ड के अनुसार, उपखंड 6.10.2, पैरा 5 [आईएसओ/आईईसी 9899: 2011],सी स्रोत शामिल किए जाने के नाम लंबाई

कार्यान्वयन दृश्यों एक या अधिक से मिलकर के लिए अद्वितीय मैपिंग प्रदान करेगा नोडिगिट्स या अंक (6.4.2.1) के बाद अवधि (।) और एक नोडिगिट। पहला अक्षर अंक नहीं होगा। कार्यान्वयन वर्णमाला के भेदभाव को अनदेखा कर सकता है और अवधि से पहले मैपिंग को आठ महत्वपूर्ण वर्णों तक सीमित कर सकता है।

इसका मतलब यह होगा कि यदि दो फाइलों में आम तौर पर पहले 8 वर्ण होते हैं, तो हेडर वास्तव में चुनता है वह अनिर्धारित है।

जब मैं क्लैंग या जीसीसी का उपयोग करके संकलित करता हूं, तो मुझे वास्तव में इस समस्या का सामना नहीं करना पड़ा है। हालांकि, क्या जीसीसी और क्लैंग में स्रोत फ़ाइल समावेशन के लिए एक दस्तावेज व्यवहार है?

आधुनिक दुनिया में, अगर कोई संकलक वास्तव में 8 वर्णों तक सीमित रहता है तो मुझे यह अजीब लगेगा।

संदर्भ: C11 WG14 draft version N1570, Cert C Coding standard

+1

POSIX में 'NAME_MAX' और' PATH_MAX' मैक्रोज़ हैं, _gcc_ इन सीमाओं पर भी आधारित हो सकता है। 8 अक्षरों की सीमा के लिए, शायद एम्बेडेड दुनिया में? – md5

+2

कुंजी शब्द _may_ है। शायद समस्या को पुराने वसा वाले सिस्टम में [8.3 फाइलनाम] (https://en.wikipedia.org/wiki/8.3_filename) प्रारूप – LPs

+0

@ md5 के साथ सिस्टम में ट्रिगर किया जा सकता है भले ही एक एम्बेडेड सिस्टम सीमित हो, आमतौर पर फर्मवेयर विकसित किया जाता है एक आधुनिक प्रणाली पर एक क्रॉस-कंपाइलर का उपयोग कर। – LPs

उत्तर

6

इसका मतलब यह होगा कि दो में शामिल करता है, तो फ़ाइलों आम में पहले 8 वर्ण होने, हेडर यह वास्तव में उठाता अनिर्धारित रहता है।

नहीं, मैं कि के खिलाफ बहस चाहते हैं: सटीक शब्द को देखते हुए हम देखते हैं कि मानक का उपयोग करता है:

[..] कार्यान्वयन अनदेखा कर सकते हैं [..]

यह "मई" है, नहीं ""। अगर बाद में इस्तेमाल किया गया तो इसका मतलब यह होगा कि व्यवहार अपरिभाषित था (एन 1570 $ 4/2)। के बाद से सटीक घोषणा के बिना के रूप में है, प्रयोग किया जाता है "हो सकता है" मुझे लगता है कि यह शब्द के सामान्य अर्थ (source, जोर मेरा) ग्रहण करने के लिए सुरक्षित है:

अवसर या अनुमति व्यक्त किया

इस प्रकार, केवल 8 वर्णों पर विचार करने के लिए एक कार्यान्वयन की अनुमति है, लेकिन इसे नहीं करना है।

अजीब बात: मैं "अनुक्रम" जीसीसी के मैनुअल में की "भेद सीमा" के लिए एक सटीक प्रलेखन, जिसका अर्थ है (N1570 $ 4/8, जोर मेरा) नहीं मिल सकता है ...

कार्यान्वयन एक दस्तावेज़ के साथ होना चाहिए जो सभी कार्यान्वयन परिभाषित और लोकेल-विशिष्ट विशेषताओं और सभी एक्सटेंशन को परिभाषित करता है।

... कि जीसीसी (कुछ बहुत ही पैडेंटिक दृष्टिकोण के तहत) को गैर-अनुरूप कार्यान्वयन माना जा सकता है।

एक पहचानकर्ता या मैक्रो का नाम में महत्वपूर्ण प्रारंभिक अक्षर: उनके मार्गदर्शन के व्यावहारिक प्रासंगिक भाग के रूप में @PaulGriffiths ने कहा, शायद (source, सूची में बिंदु 4) है।

प्रीप्रोसेसर सभी पात्रों को महत्वपूर्ण मानता है। सी मानक के लिए केवल इतना आवश्यक है कि पहले 63 महत्वपूर्ण हों।

टिप्पणी के बारे में:

[..] मैं वास्तव में अगर यह मुझे जब तक काट के रूप में मैं एक लिनक्स मंच पर इन compilers में से एक का उपयोग कर रहा होगा मूल्यांकन करने के लिए कोशिश कर रहा हूँ। [..]

मुझे सच में संदेह है कि यह कभी भी (फिर से) एक मुद्दा होगा।

+0

यहां बिंदु 4 देखें: कम से कम कुछ के लिए https://gcc.gnu.org/onlinedocs/cpp/Implementation-limits.html#Iplementment-limits। –

+0

@PaulGriffiths धन्यवाद, यद्यपि यदि हम यहां "बाध्य" चीज़ को नापसंद कर रहे हैं, तो न तो पहचानकर्ता और न ही मैक्रो नाम है, लेकिन एक "अनुक्रम" –

+0

सच है, हालांकि मुझे यह बिंदु कार्यान्वयन-परिभाषित व्यवहार के रूप में सूचीबद्ध नहीं दिख रहा है वैसे भी अनुलग्नक जे में दस्तावेज की आवश्यकता है, इसलिए यह शायद अनुरूपता मुद्दा नहीं है। –

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