2011-05-15 3 views
25

मुझे पहचानकर्ताओं के लिए अधिकतम लंबाई की मानक कहने को याद नहीं है, इसलिए सिद्धांत में वे लंबे हो सकते हैं। वास्तविक जीवन में, उन नामों को कम से कम संकलक और लिंकर कार्यान्वयन से सीमित किया जा सकता है।सामान्य (बिल्ड) सिस्टम पर सी/सी ++ पहचानकर्ता के लिए अधिकतम लंबाई क्या है?

हालांकि यह सभी प्रणालियों

int a; 

इस स्निपेट

#!/usr/bin/perl 
print "int" . "b" x 2**16 . ";"; 

पर काम करना चाहिए एक declarationen कि ld साथ std:: somethings को अपरिभाषित संदर्भ देता है, जबकि (का उपयोग कर जीसीसी/MinGW) जोड़ने/संकलन पैदा करता है।

तो विभिन्न प्रणालियों पर पहचानकर्ता के लिए आकार सीमा क्या हैं?

+1

चेतावनी दी जानकारी होनी चाहिए कि नाम लंबाई सीमा * घायल नाम * के लिए कर रहे हैं। एमएसवीसी से कुछ परेशान चेतावनियों से मुझे बहुत समय बीटा गया है जब मैंने टेम्पलेट फ़ंक्शंस लिखे थे और उन्हें कुछ 'boost :: transform_iterator 'पास कर दिया था। तात्कालिकता का उलझन नाम सिर्फ पागलपन से मिलता है। –

+0

@Alexandre: अब तक मुझे यह समस्या कभी नहीं मिली। मुझे याद रखने वाले टेम्पलेट से संबंधित एकमात्र मुद्दा यह था कि मुझे कुछ परियोजनाओं में टेम्पलेट गहराई में वृद्धि करना पड़ा जो मेटा प्रोग्रामिंग का उपयोग करता था। – mbx

+0

जीसीसी में ऐसी कोई समस्या नहीं है (@Anders 'उत्तर देखें)। यह केवल एक चेतावनी है कि कभी-कभी एमएस टूल्स के साथ होता है जब उलझन वाले नाम 2048 वर्णों से अधिक होते हैं। हालांकि यह आमतौर पर आपके निर्माण के साथ विनाश नहीं खेलता है। –

उत्तर

12

सी ++ मानक के अनुलग्नक बी का कहना है कि एक कार्यान्वयन को पहचानकर्ताओं को कम से कम 1024 वर्णों का समर्थन करना चाहिए, लेकिन यह अनिवार्य नहीं है।

+2

सावधानी पर एक शब्द, अगर यह स्मृति मुझे सही सेवा प्रदान करती है तो यह लंबाई उलझन वाले प्रतीक की पहचान करती है। तर्क के रूप में टेम्पलेट वर्गों को ले जाने के फ़ंक्शन में बहुत बालों वाले उलझन वाले नाम मिल सकते हैं, इसलिए सीमा अब तक नहीं पहुंची है। –

+0

@Matthieu स्पष्ट रूप से नहीं। वास्तव में जहां तक ​​मुझे पता है, मानक नाम उलझन पर चर्चा नहीं करता है। –

+0

@Neil: मुझे नहीं लगता कि यह करता है, प्रत्येक कंपाइलर (और वास्तव में) अपने स्वयं के एबीआई को विकसित कर सकता है (या अगर किसी और का पुन: उपयोग कर रहा है, तो सुनिश्चित करें कि उत्पादित कोड वास्तव में संगत है)। मैं बस इस तथ्य को उठाना चाहता था कि मानक उपकरण श्रृंखला के लिए लंबाई निर्दिष्ट करता है, लेकिन यह एक लिंकर पर इंगित लंबाई से अलग है, क्योंकि एक लिंकर केवल उलझन (सजाए गए) प्रतीक देखता है। –

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