2012-04-30 25 views
11

के गायब कोष्ठक को अनदेखा करता है डेल्फी कंपाइलर इस लापता कोष्ठक को अनदेखा क्यों करता है?कंपाइलर निकास कमांड

function Test: Boolean; 
begin 
    Exit(True; // <-- eek! it compiles... 
end; 

मैं अपने कोड इस तरह की तलाश में से कुछ मिल गया है और पहले सोचा था कि डेल्फी मेरी यूनिट पर ध्यान नहीं देता - लेकिन यह सिर्फ वाक्य रचना इस प्रकार की त्रुटि पर ध्यान नहीं देता। तो अब मैं जानना चाहता हूं क्यों।

+5

यह मेरे लिए कंपाइलर में एक बग जैसा दिखता है। –

+0

XE2 अपडेट में वही 4. त्रुटि अंतर्दृष्टि हालांकि इसे चिह्नित करता है। –

+0

मेरा अनुमान है कि यह होगा कि फ़ंक्शन में कुछ और नहीं है, इसलिए यह फ़ंक्शन को अनदेखा करता है। बाहर निकलने से पहले कुछ कोड जोड़ने का प्रयास करें। – CyprUS

उत्तर

1

मुझे लगता है कि Exit को अपने आप को टोकन माना जाता है, और Exit के बाद उसी दायरे में परिभाषित कुछ भी संकलक द्वारा अनदेखा किया जाता है (क्योंकि यह वैसे भी उन निर्देशों को निष्पादित नहीं कर सकता है)।

+0

'बाहर निकलें (सत्य;' के बाद निर्देशों को जोड़ना "ई 2066 गुम ऑपरेटर या अर्धविराम" (डेल्फी एक्सई) के साथ फिर से शिकायत करता है। –

+0

मुझे लगता है कि ऐसा इसलिए है क्योंकि सेमीकॉलन संकलक को अगले निर्देश को संकलित करने का प्रयास करने के लिए संकेत देता है। – LaKraven

+0

अनिवार्य रूप से मैं कह रहा हूं कि 'बाहर निकलें' एक "पूर्ण" टोकन है, जो संकलक को अर्धविराम के अगले अवसर तक किसी भी कथन पर किसी भी बाद के वर्णों की उपेक्षा करने के लिए प्रेरित करता है, जो इसे आगे बढ़ने के निर्देशों से अलग करता है। यह है एक quirk, निश्चित रूप से ... और एक दिलचस्प खोज! – LaKraven

0

शायद संकलक सोच रहा है कि या तो 1. स्वयं से बाहर निकलें, या 2. ब्रांड्स() के सेट के साथ बाहर निकलें। यदि यह # 2 नहीं मिलता है तो यह # 1 पर जाता है।