दिलचस्प पोस्ट
डेटा-आईडी विशेषता कैसे प्राप्त करें? नोड.जेएस में मोंगोज के साथ कैसे पगनेट करें? Maven2 प्रॉपर्टी जो मूल निर्देशिका को दर्शाती है फ़ंक्शन के साथ जावास्क्रिप्ट टर्नरी ऑपरेटर का उदाहरण पायथन में एक "कॉल करने योग्य" क्या है? Gnuplot लाइन प्रकार Php में 2 छवियों की तुलना करें कैसे एक HTTP पोस्ट अनुरोध node.js में बनाने के लिए? बड़े पैमाने पर ईमेल अभियान ट्रैक करें MVVM का उपयोग करते हुए WPF में पाठ बॉक्स से उचित डेटाग्रीड खोज पीथोनपाथ बनाम sys.path कुंजी पर आधारित PHP बहुआयामी सरणी को सॉर्ट करें? JQM (jQueryMobile) गतिशील रूप से जोड़े गए तत्व सही तरीके से प्रदर्शित नहीं करते हैं और सीएसएस लागू नहीं होता है AngularJS में एकाधिक विशिष्ट मॉडल गुणों (या संबंध में) द्वारा फ़िल्टरिंग मैं फ्लास्क में एजेक्स से पोस्ट किए गए डेटा का उपयोग कैसे कर सकता हूं?

त्रुटि: इस सरल सी कोड में आवश्यक लार्वेल? (असाइनमेंट के साथ टर्नरी?)

मेरे पास है :

#include<stdio.h> int main() { int a=5,b=6; (a>b)?b=a:b=b; // Here is the error return 0; } 

लेकिन अगर मैं प्रतिस्थापित करता हूं:

 (a>b)?b=a:b=b; // Error with (a>b)?(b=a):(b=b); // No-Error 

मैं समझता हूँ कि lvalue एक ऐसा मूल्य है जिसके लिए कुछ सौंपा जा सकता है और यह कैसे rvalue से अलग है, लेकिन extra parenthesis अंतर क्यों बना रहा है

वेब के समाधान से एकत्रित समाधान "त्रुटि: इस सरल सी कोड में आवश्यक लार्वेल? (असाइनमेंट के साथ टर्नरी?)"

असाइनमेंट में टर्नेरी ऑपरेटर की तुलना में निम्न प्राथमिकता है, ताकि रेखा इस तरह मूल्यांकन करे:

 ((a>b)?b=a:b)=b; 

उपयोग:

 b=(a>b)?a:b; 

असल में, सी में, यह कोड

 (a>b)?b=a:b=b; 

कई कंपाइलर्स द्वारा पार्स किया जाता है

 ((a>b)?b=a:b)=b; 

जो एक त्रुटि है, अभिव्यक्ति के रूप में ((a>b)?b=a:b) एक रैवल्यू के लिए मूल्यांकन करता है जिसे आप b साथ असाइन करने का प्रयास करते हैं जो कि किसी त्रुटि में होता है। एक रवैया असाइन करने की कोशिश करना एक त्रुटि है अगर यह उस तरह पार्स नहीं किया जाता है, तो इसकी बस एक वाक्यविन्यास त्रुटि है। लेकिन एक सी संकलक को इसे पार्स करने की अनुमति नहीं है:

 ((a>b)?b=a:(b=b)); //not allowed to parse by C language 

चूंकि सी का व्याकरण एक कंपाइलर को ऊपर के कोड को पार्स करने की अनुमति नहीं देता है

लेकिन आपने जो लिखा है (मूल कोड) सी ++ के रूप में सही है

यहाँ सी और सी ++ के व्याकरण बहुत अलग हैं। और इस अंतर के कारण आप देखते हैं कि दोनों भाषाओं ने अभिव्यक्ति को अलग तरीके से व्यवहार किया है। यही है, the conditional expression in C++ the conditional expression in C से अलग the conditional expression in C

विकिपीडिया के पास इसके लिए बहुत अच्छी और सही व्याख्या है:

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

तार्किक-या-अभिव्यक्ति? अभिव्यक्ति: सशर्त-अभिव्यक्ति

जबकि सी ++ में यह है:

तार्किक-या-अभिव्यक्ति? अभिव्यक्ति: असाइनमेंट-अभिव्यक्ति

इसलिए, अभिव्यक्ति:

ई = एक <डी? ए ++: ए = डी

दो भाषाओं में अलग ढंग से पार्स किया जाता है। सी में, यह अभिव्यक्ति एक वाक्यविन्यास त्रुटि है, लेकिन कई compilers इसे पार्स करते हैं:

ई = ((एक <डी? ए ++: ए) = डी)

जो एक सिमेंटिक त्रुटि है, क्योंकि सशर्त-अभिव्यक्ति के परिणाम (जो कि ++ हो सकता है) एक लावलू नहीं है। सी ++ में, इसे पार्स किया जाता है:

ई = (एक <डी? ए ++: (ए = डी))

जो एक वैध अभिव्यक्ति है

यह वाकई:

 ((a>b)?b=a:b)=b; 

नोट: आपको बस चाहिए

 b = (a>b)?a:b; 

जब हम कोष्ठक में समीकरण लगाया जाता है तो इसे अभिव्यक्ति के रूप में माना जाता है और यह कुछ मान देता है जो त्रुटि का समाधान प्रदान करता है।