http://en.wikipedia.org/wiki/C_preprocessor#Multiple_evaluation_of_side_effects पढ़ने के दौरान, मैं इस उदाहरण में आया:सी ब्लॉक अभिव्यक्ति बन जाता है: ({int a = 1; int b = 2; a + b;}) 3 बराबर है
\#define max(a,b) \
({ typeof (a) _a = (a); \
typeof (b) _b = (b); \
_a > _b ? _a : _b; }) // WHY DOES THIS LINE WORK?
जो आप एक फ़ंक्शन की तरह उपयोग कर सकते हैं, यानी max(1,2)
एक अभिव्यक्ति है जो 2.
है मेरा प्रश्न है, ({ statment-list last-expression; })
निर्माण कैसे करता है अंतिम अभिव्यक्ति के मूल्य का मूल्यांकन? विशेष रूप से, इस निर्माण का एक पार्स पेड़ कैसा दिखता है? मैंने सोचा कि { }
हमेशा एक यौगिक-कथन का मतलब है, और बयानों के पास कोई मूल्य नहीं है। मैंने सी व्याकरण में चारों ओर खुदाई करने की कोशिश की और अभी भी इस समस्या को समझ नहीं पाया।
'42;' एक बयान भी है :-) – paxdiablo
आह, लेकिन मुझे संदेह है कि ओपी जानता है कि '42; 'एक बयान है क्योंकि यह मानक सी में एक बयान है। कथन अभिव्यक्ति है हालांकि, मानक सी में नहीं। –