c++ - size_t या ssize_t का उपयोग करना चाहिए




unsigned signed (2)

इस प्रश्न का उत्तर यहां दिया गया है:

मेरे कोड पर, मैं int या unsigned int का उपयोग नहीं करता हूं। मैं केवल पोर्टेबल के लिए size_t या ssize_t का उपयोग करता हूं। उदाहरण के लिए:

typedef size_t intc;    // (instead of unsigned int)
typedef ssize_t uintc;  // (instead of int)

क्योंकि strlen , string , vector ... सभी size_t उपयोग करते हैं, इसलिए मैं आमतौर पर size_t उपयोग करता हूं। और जब मैं नकारात्मक हो सकता ssize_t तो मैं केवल ssize_t उपयोग करता ssize_t

लेकिन मुझे लगता है कि:

हस्ताक्षरित पूर्णांक प्रकार उन उपयोगों के लिए आदर्श हैं जो स्टोरेज को थोड़ा सरणी के रूप में मानते हैं। सकारात्मक पूर्णांक का प्रतिनिधित्व करने के लिए एक और बिट प्राप्त करने के लिए एक int के बजाय एक हस्ताक्षरित का उपयोग करना लगभग एक अच्छा विचार नहीं है। यह सुनिश्चित करने का प्रयास है कि कुछ मूल्य अप्रशिक्षित चर घोषित करके सकारात्मक हैं, आमतौर पर निहित रूपांतरण नियमों से पराजित होंगे।

पुस्तक सी ++ प्रोग्रामिंग भाषा में

तो मैं परेशान हूँ। क्या मै गलत हु? एसटीएल पुस्तक पर सुझाव का पालन क्यों नहीं करता है?

https://code.i-harness.com


ssize_t उन कार्यों के लिए उपयोग किया जाता है जिनके रिटर्न वैल्यू या तो वैध आकार हो सकते हैं, या त्रुटि को इंगित करने के लिए ऋणात्मक मान हो सकता है। यह कम से कम श्रेणी [-1, SSIZE_MAX] में मूल्यों को स्टोर करने में सक्षम होने की गारंटी है ( SSIZE_MAX सिस्टम-निर्भर है)।

इसलिए जब भी आप बाइट्स में आकार वापस करने का मतलब रखते हैं तो ssize_t उपयोग करना चाहिए, और ssize_t जब भी आप बाइट्स या एक (ऋणात्मक) त्रुटि मान में आकार वापस कर देंगे।

देखें: http://pubs.opengroup.org/onlinepubs/007908775/xsh/systypes.h.html


ssize_t मानक में शामिल नहीं है और पोर्टेबल नहीं है। ऑब्जेक्ट्स के आकार को संभालने के दौरान size_t का उपयोग किया जाना चाहिए (पॉइंटर अंतर के लिए ptrdiff_t भी है)।





size-t