Friday, 15 April 2011

coding style - Logical value of an assignment in C -


  जबकि (curr_data [1]! = (अहस्ताक्षरित int) NULL & amp; ((curr_ptr = (शून्य *) Curr_data [1]) 1))  

दो भाग प्रश्न।

क्या होगा (curr_ptr = (शून्य *) curr_data [1] ) मूल्यांकन, तार्किक रूप से TRUE ?

इसके अलावा, मैं इसके बजाय हैक-आईश जानता हूं, लेकिन जबकि स्टेटमेंट कानूनी सी है? मुझे कोड में कहीं और असाइनमेंट डाल देने के लिए महान contortions के माध्यम से जाना होगा, तो मैं वास्तव में अच्छा होगा अगर मैं इसे वहाँ छोड़ सकता है, लेकिन अगर यह इतना बड़ा है कि यह हर किसी की आंखों में लपटों में फट जाएगा, मैं इसे बदल दूँगा ।

अपने प्रश्नों का उत्तर देने के लिए:

  1. यह सच का मूल्यांकन करेगा अगर curr_ptr को NULL पर सेट नहीं किया गया है (अर्थात curr_data [1] नहीं है 0)।
  2. मुझे विश्वास है यह कानूनी है, लेकिन इस लाइन की कोड के साथ बड़ी समस्याएं हैं।

फिर भी, मैं मान रहा हूँ कि आपने यह कोड नहीं लिखा है, क्योंकि आप इसे बनाम छोड़ने के बारे में बहस कर रहे हैं। इसे बाहर ले जा रहा है तो मैं चाहता हूं कि आप यह पता करें कि कोड की यह रेखा किसने लिखा है और उन्हें भारी कुंद वस्तु में पेश किया है।

  1. (अहस्ताक्षरित int) NULL हास्यास्पद है आप ऐसा क्यों करेंगे? यह संभवतः 0 लिखने के समान ही होगा (सुनिश्चित नहीं है कि यह मानक द्वारा गारंटीकृत है)।
  2. curr_data [1] में किस तरह का डेटा है? कोड> यदि इसे एक सूचक में डाला जा रहा है (और संकेतक इसे डाली जा रहे हैं)? यदि यह एक अभिन्न प्रकार के रूप में एक संकेतक धारण करना माना जाता है, तो आपको intptr_t या uintptr_t & lt; stdint.h & gt; में दी गई प्रकार का उपयोग करना चाहिए उस प्रयोजन के लिए (यदि आप संकलक हैं तो C99 ptrdiff_t को स्वीकार्य विकल्प नहीं हो सकता है)।
  3. || 1 अंत में बेमानी हो रहा है यदि curr_ptr = (शून्य *) curr_data [1] झूठी मूल्यांकन किया गया होता, तो हम इसे पहले शर्त में पकड़े होते।

यह एक दर्द हो सकता है गधा में, लेकिन इस पंक्ति को फिर से लिखने पर गंभीरता से पुनर्विचार। यह IOCCC में एक प्रविष्टि की तरह दिखता है।


No comments:

Post a Comment