2010-06-04 7 views
9

मैं चेतावनी फेंकने की तरहसी ++ चेतावनी: ऑपरेंड में अंकगणित के आसपास कोष्ठक का सुझाव दें |

A = B|C|D|E; 

एक कोड "के संकार्य में गणित के आसपास कोष्ठक सुझाव है |" है

A=(B|C)|(D|E); 

के रूप में एक और:

A=(((B|C)|D)|E); 

फिर भी एक ही चेतावनी बनी रहती है

उम्मीद है कि अभिव्यक्ति ऑपरेटरों के लिए उच्च प्राथमिकता paranthesis की जरूरत है, निम्न तरीकों की कोशिश की।

कृपया इसे हल करने में मेरी सहायता करें।

धन्यवाद, सुजाता

बी, सी, डी enums कर रहे हैं और ई एक पूर्णांक है।

+2

आप किस कंपाइलर का उपयोग कर रहे हैं? –

+1

आपका उदाहरण जीसीसी के साथ चेतावनी के बिना संकलित करता है। –

+4

बी सी डी और ई क्या हैं, बिल्कुल? – James

उत्तर

10

आपके पास अपनी अभिव्यक्ति में कुछ अंकगणितीय ऑपरेटर है जो वास्तव में बस बी नहीं है, या यह वास्तव में बस सी नहीं है। संकलक यह सुझाव दे रहा है कि आप जो भी अभिव्यक्ति को संश्लेषित करते हैं ताकि पाठकों को यह पता चले कि आपने क्या लिखा है आपका मतलब। यदि आप संश्लेषित नहीं करते हैं, तो सभी को याद रखना होगा कि प्राथमिकताएं क्या हैं, और उन्हें यह पता लगाना होगा कि आपने इसे कब लिखा था।

इसे आजमाएं: (बी) | (सी) | (डी) | (ई)।

+0

बी, सी, डी enums हैं और ई एक पूर्णांक – Programmer

+0

है, मुझे लगता है कि आप बेहतर करेंगे क्या ग्रेफैड ने सुझाव दिया है, gcc -E के माध्यम से अपनी स्रोत फ़ाइल चलाएं। आपके enums में से एक गलती से एक मैक्रो हो सकता है जिसे आप नहीं जानते थे। –

2

यह एक अजीब चेतावनी है। जब आप विभिन्न ऑपरेटरों का उपयोग कर रहे हों तो आपको केवल प्राथमिकता पर ध्यान देना होगा और उन ऑपरेटरों के पास अलग-अलग प्राथमिकताएं होंगी। उदाहरण के लिए, अंकगणितीय गुणा में अतिरिक्त से अधिक प्राथमिकता है।

लेकिन इस मामले में आप केवल एक ऑपरेटर का उपयोग कई बार कर रहे हैं। बिटवाई या सहयोगी और कम्यूटिव ((A | B) | C == A | (B | C) और A | B == B | A) इसलिए चेतावनी के लिए वास्तव में कोई कारण नहीं है।