2011-03-29 6 views
31

जब मैं नीचे दिए गए कोड का टुकड़ा संकलित करने के लिए प्रयास करते हैं, मैं इस चेतावनी मिलती है:संकलक चेतावनी - सुझाव है कि काम के आसपास कोष्ठक सच मूल्य के रूप में इस्तेमाल

warning: suggest parentheses around assignment used as truth value

इस क्यों होता है? यह एक सामान्य मुहावरे है, मुझे विश्वास है। मैं पहले भी अपने कोड पर कुछ ऐसा इस्तेमाल करता हूं।

struct PIDList* 
getRecordForPID(struct PIDList* list, pid_t pid) { 
    while(list = list->next) 
     if (list->pid == pid) 
      return list; 

    return NULL; 
} 

धन्यवाद

संपादित करें: अपने जवाब के लिए धन्यवाद। सभी बहुत समान हैं इसलिए मैं पृष्ठ को रीफ्रेश करने और शीर्ष :P

+0

आप चेतावनी को बंद, या बल्कि इसे बंद छोड़ने के लिए स्वतंत्र हो ... –

+3

मैं अनुपस्थित दिमाग की तरह, इसलिए मैं पैडेंटिक, -वॉल, -वेक्स्ट्रा, -शशाडो और –

+2

की तरह आभारी हूं, ठीक है आप इस विशिष्ट चेतावनी को अक्षम करने के लिए '-वोनो-कोष्ठक' (मुझे विश्वास है कि यह सही है) जोड़ सकता है। हालांकि, अगर आप अनुपस्थित हैं, तो सावधान रहें '== '... –

उत्तर

52

स्पष्ट पर स्पष्ट रूप से एक को याद कर दूंगा - तो संकलक चेतावनी नहीं देगा कि आपने शायद गलती की है।

while ((list = list->next) != NULL) 

या

while ((list = list->next)) 

कुछ दिन तुम खुशी होगी संकलक तुमसे कहा था, लोगों को कि गलती करना;)

+0

लोग करते हैं! इस कारण से, मैं सी में 'if (0 == varName)' लिखता था, ताकि अगर मैं इसे गलत टाइप करता हूं तो मुझे एक त्रुटि संदेश मिल सकता है। – jpaugh

17

यह सिर्फ एक 'सुरक्षा' चेतावनी है। यह अपेक्षाकृत सामान्य मुहावरे है, लेकिन एक अपेक्षाकृत सामान्य त्रुटि भी है जब आपके पास == है। और भी अधिक आम लोगों = का उपयोग करने के लिए जब वे == मतलब है जबकि उस विशेष मुहावरा आम है

while ((list = list->next)) 
+4

+1 के बिना किसी समाधान के लिए +1! = 0' या '! = NULL'। :-) –

45

,: आप चेतावनी कोष्ठकों का एक और सेट जोड़कर दूर कर सकते हैं। सम्मेलन जब आप वास्तव में मतलब = कोष्ठकों की अतिरिक्त परत का उपयोग करना है: यह डिफ़ॉल्ट रूप से बंद है, क्योंकि

while ((list = list->next)) { // yes, it's an assignment 
+3

यह उत्तर स्वीकार किए गए एक से अच्छा है, अच्छा है। – gsamaras

संबंधित मुद्दे