2017-05-22 6 views
9

मैंने कई मामलों में कुछ सी कार्यों का परीक्षण करने के लिए पायथन में एक छोटा परीक्षण कार्यक्रम बनाया है। यह पाइथन प्रोग्राम मेरे सी कार्यों को आयात और उपयोग करने के लिए ctypes का उपयोग करता है।पाइथन में सी प्रकार की सीमाएं ("limit.h") का पता लगाना?

लेकिन मैं उदाहरण के लिए न्यूनतम और अधिकतम मूल्य मामलों (limits.h के ULLONG_MAX) का परीक्षण करना चाहूंगा।

लेकिन चूंकि इनमें से कुछ सीमाएं सिस्टम निर्भर हो सकती हैं, इसलिए मैं अपने कार्यक्रम में इसे हार्ड कोडिंग से बचाना पसंद करूंगा; मैं इसे गतिशील रूप से प्राप्त करना चाहता हूं।

क्या इन सीमाओं को पाइथन में प्राप्त करना संभव है?

+0

संभावित डुप्लिकेट [मैं पाइथन से सी फ़ाइल में # परिभाषित कैसे कर सकता हूं?] (Https://stackoverflow.com/questions/12147394/how-can-i-reference-defines-in-ac-file- से-पायथन) – nitzanms

उत्तर

6

मेरा मानना ​​है कि निकटतम आप प्राप्त कर सकते हैं

ctypes.sizeof(whatever_type) 

जो आप बाइट में प्रकार के आकार देता है। उदाहरण के लिए, आप यह पता लगाने के लिए ctypes.sizeof(ctypes.c_int) का उपयोग कर सकते हैं कि बाइट 4 बाइट्स, 8, या कुछ अन्य अजीब संख्या है या नहीं।

+1

या 2 के पूरक मान लें और संबंधित हस्ताक्षर किए गए प्रकार के साथ ऋणात्मक -1 मान का उपयोग करें, उदाहरण के लिए हस्ताक्षरित सीमा के लिए 'c_uint (-1) .value', और हस्ताक्षरित अधिकतम प्राप्त करने के लिए बिना हस्ताक्षरित अधिकतम 2 को विभाजित करें। – eryksun

+0

@eryksun: मुझे एक ऑफ-ऑफ-रेंज मान पास करने के बारे में दस्तावेज़ों में पाया गया है कि "कोई अतिप्रवाह जांच नहीं की जाती है", इसलिए मुझे नहीं पता कि 'c_uint (-1) 'वास्तव में समर्थित है या नहीं। – user2357112

+1

कोई अतिप्रवाह जांच का मतलब है कि यह अपवाद उठाए बिना अतिप्रवाह करता है। यही वह है जो मैं इस पर निर्भर करता हूं, और स्रोत से जानता हूं, लेकिन आप सही हैं कि दस्तावेज़ों को खराब तरीके से शब्द दिया जाता है। – eryksun

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