पीसी फाहा के अनुसार, निम्नलिखित बयान TRUE
कभी नहीं होगा:क्या यह सी/सी ++ अगर() कथन कभी भी सत्य का मूल्यांकन कर सकता है?
if((variable & 0x02) == 1)
मैं TRUE
को एम्बेडेड सिस्टम के लिए एक सी संकलक है कि यह मूल्यांकन करता है का उपयोग कर रहा है जब भी variable
में इसी बिट सेट है। मुझे लगता है कि संकलक TRUE
/FALSE
परिणामस्वरूप संख्याओं की तुलना करने के बजाय ==
के दोनों किनारों की तुलना कर रहा है। दूसरे शब्दों में, हर बार अभिव्यक्ति (varable & 0x02)
नहीं शून्य (अर्थात TRUE
), बयान भी TRUE
हो जाएगा, मूल्य के बाद से 1 is also TRUE
(नहीं शून्य)।
अगर C/C++
मानकों स्पष्ट रूप से कैसे एक संकलक इस मामले में व्यवहार करना चाहिए परिभाषित मैं नहीं जानता। क्या वहां कोई C/C++
विशेषज्ञ हैं जो मानकों के आधार पर इस प्रश्न का उत्तर दे सकते हैं (उदा। C90, C99,
आदि) कहें?
पी.एस .: बयान में इसके बाद के संस्करण, "चर" एक अहस्ताक्षरित चार है।
'variable' के प्रकार क्या है हो जाएगा इंगित करता है? –
क्या आप इस कंपाइलर को नाम दे सकते हैं? मेरा एक दोस्त अजीब कंपाइलर कीड़े का संग्रह बनाता है। – blaze
क्या यह संभव है कि आपके असली कोड में डबल एम्पर्सेंड (उदा। "Var && 0x02") है? यह संकलक को यथासंभव मूल्यांकन करने की व्याख्या करेगा। – tinman