2010-12-10 16 views
5

Possible Duplicate:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)
Undefined Behavior and Sequence Points (C++ FAQ entry)सरल पार्स सवाल

सी और सी ++ में कैसे अभिव्यक्ति x+++++y पार्स किया गया है? x++ ++ +y या x++ + ++y के रूप में?

+6

आप वास्तव में इसे लिखने पर विचार नहीं कर रहे हैं, हालांकि, सही? * सही? * ;-) –

+1

एक obfuscated कोड प्रतियोगिता दर्ज करना? – jball

+0

जेसस मैरी जोसेफ – filipe

उत्तर

11

x+++++yx ++ ++ + y के रूप में पार्स किया गया है और x ++ + ++ y के रूप में नहीं है। Maximal Munch principle के अनुसार, "tokenizer भावना बनाने को रोकने के लिए एक और चरित्र वर्तमान टोकन जोड़ने का कारण बनता है जब तक स्रोत फ़ाइल से पात्रों को पढ़ने रखना चाहिए"

x++ ++ +y संकलन नहीं करना चाहिए (C और C++ में) क्योंकि बाद वेतन वृद्धि ऑपरेटर ++ को एक तर्क के रूप में lvalue की आवश्यकता है और rvalue देता है।

+0

यह उन सभी भाषाओं के लिए सच है जो लालची/सबसे लंबे समय तक मेल खाते हैं टोकननाइजेशन के लिए regexes - जो उनमें से अधिक होना चाहिए (वास्तव में, मैं उस के बारे में नहीं सोच सकता जो नहीं करता है)। – delnan

+0

* "' x ++ ++ + y' संकलित नहीं होना चाहिए "* और वास्तव में, यह नहीं है (वैसे भी 'gcc' पर):' त्रुटि: वृद्धि ऑपरेशन के रूप में आवश्यक lvalue 'वाह मुझे यह देखने के लिए राहत मिली थी। –

+0

दुर्भाग्यवश, '+++++++++' के सभी रूप असम्बद्ध नहीं हैं। एमएसवीसी कम से कम खुशी से उनमें से कुछ स्वीकार करता है और फिर डब्ल्यूटीएफ जानता है कि इसके साथ क्या है। हमारे पास इस छोटी, घर की उपयोगिता है जो हमेशा इंटर्न को दी जाती है (मेरा निर्णय नहीं)। यह उस जगह पर उस तरह से बकवास हो गया है। –

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