यह कोड है जो विंडोज एसडीके के साथ संकलित करता है:0xFFFFFFFF का उपयोग 32 बिट प्रकार में सभी बिट्स सेट करने के लिए एक विश्वसनीय तरीका है?
UINT cFiles = DragQueryFileW(hDrop, 0xFFFFFFFF, NULL, 0);
जहां DragQueryFileW()
में यह हस्ताक्षर है:
UINT DragQueryFileW(HDROP, UINT, LPWSTR, UINT);
और UINT
को इस तरह एसडीके शीर्षकों में कहीं परिभाषित किया गया है:
typedef unsigned int UINT;
मंच जहां int
निश्चित रूप से 32-बिट्स है। सामान्य रूप से, UINT
जैसे प्रकार सिस्टम गठबंधन पर निश्चित चौड़ाई को स्वतंत्र करने के लिए हैं, इसलिए यदि किसी अन्य प्लेटफ़ॉर्म पर एक ही कोड को फिर से सम्मिलित किया जाना है, जहां DragQueryFileW()
को किसी भी तरह से फिर से कार्यान्वित किया गया है, तो यह भी संबंधित typedef
होगा जो UINT
मानचित्र को चालू करेगा एक उपयुक्त 32-बिट हस्ताक्षरित प्रकार।
अब एक स्थिर विश्लेषण उपकरण है जो 0xFFFFFFFF
निरंतर देखता है और शिकायत करता है कि यह एक अयोग्य जादू संख्या और one should use -1
instead है। जबकि निश्चित रूप से -1
अच्छा और पोर्टेबल है, मैं नहीं देख सकता कि 0xFFFFFFFF
निरंतर उपयोग करने का तरीका यहां एक समस्या हो सकती है क्योंकि जब भी प्रकार को पोर्ट करना अभी भी 32-बिट होगा और स्थिर ठीक रहेगा।
-1
के बजाय 0xFFFFFFFF
का उपयोग कर रहा है ताकि सभी परिदृश्य इस परिदृश्य में सुरक्षित और पोर्टेबल सेट कर सकें?
हो सकता है स्थिर विश्लेषक शिकायत करता है, क्योंकि इसके बारे में 32-बिट या 64-बिट चिंता मत हो सकते हैं। – iammilind
स्थिर विश्लेषण उपकरण में झूठी सकारात्मक की तरह लगता है। यह देखने में सक्षम नहीं हो सकता है कि आप हमेशा 32-बिट संदर्भ में उस स्थिरता का उपयोग कर रहे हैं। –
इसके बजाए '~ 0u' का प्रयोग करें। – ybungalobill