दिलचस्प पोस्ट
पायथन में ऑडियो रिकॉर्ड और रिकॉर्ड करें सभी ब्राउज़रों में वेब पेज कैशिंग को कैसे नियंत्रित किया जाए? जावास्क्रिप्ट चेक बनाम नल बनाम। अपरिभाषित और == और === के बीच का अंतर मेरे WPF अनुप्रयोग में, छवि में मेरा लोड पीएनजी लोगो डिजाइन समय पर दिखाता है लेकिन रन टाइम पर नहीं मैं Linq को SQL dbml फ़ाइल में कैसे अपडेट कर सकता हूं? "Async: false" jQuery.ajax () में क्या होता है? मेवेन हर बार maven-metadata.xml क्यों डाउनलोड कर रहा है? सी ++ यूनिट परीक्षण चौखटे की तुलना EntityFramework – समग्र कुंजी की क्वेरी शामिल है गतिशील रूप से नए तत्वों को जोड़ने के बाद jQuery चयनकर्ता अद्यतन नहीं करता है फ्रंट नियंत्रक क्या है और इसे PHP में कैसे कार्यान्वित किया जाता है? क्या मैं एचटीएमएल 5 नंबर इनपुट के स्पिन बॉक्स को छिपा सकता हूं? TypeScript ऑब्जेक्ट्स के रूप में शब्दकोश प्रकार के रूप में सी # JQuery का उपयोग करते हुए मैं एक टेक्स्टबॉक्स का मान कैसे प्राप्त करूं? गतिविधि और टुकड़ा गतिविधि के बीच का अंतर

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

मेरे पास है :

#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; 

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