2017-05-22 17 views
9

Tôi đã thực hiện một chương trình thử nghiệm nhỏ trong python để kiểm tra một số hàm C trong nhiều trường hợp. Chương trình python này sử dụng ctypes để nhập và sử dụng các hàm C của tôi.Phát hiện giới hạn loại C ("limits.h") trong python?

Nhưng tôi cũng muốn kiểm tra các trường hợp giá trị tối thiểu và tối đa (ví dụ: limits.h 's ULLONG_MAX).

Nhưng vì một số giới hạn này có thể phụ thuộc vào hệ thống, tôi muốn tránh viết mã cứng trong chương trình của mình; Tôi thà tự động lấy nó.

Có thể nhận các giá trị giới hạn này trong python không?

+0

Bản sao có thể có của [Làm cách nào tôi có thể tham chiếu #defines trong tệp C từ python?] (Https://stackoverflow.com/questions/12147394/how-can-i-reference-defines-in-ac-file- từ-python) – nitzanms

Trả lời

6

Tôi tin gần nhất bạn có thể nhận được là

ctypes.sizeof(whatever_type) 

mang đến cho bạn thấy kích thước của các loại tính bằng byte. Ví dụ, bạn có thể sử dụng ctypes.sizeof(ctypes.c_int) để tìm hiểu xem một byte là 4 byte, 8 hoặc một số số lạ khác.

+1

Hoặc giả sử bổ sung 2 và sử dụng giá trị -1 âm với loại không dấu tương ứng, ví dụ: 'c_uint (-1) .value' cho giới hạn chưa ký, và chia tối đa không dấu bằng 2 để nhận giá trị CPC – eryksun

+0

@eryksun: Tất cả những gì tôi tìm thấy trong tài liệu về việc vượt qua một giá trị ngoài phạm vi là "không kiểm tra tràn được thực hiện", vì vậy tôi không biết liệu 'c_uint (-1)' có thực sự được hỗ trợ hay không. – user2357112

+1

Kiểm tra tràn không có nghĩa là nó tràn mà không làm tăng ngoại lệ. Đó là những gì tôi đang phụ thuộc vào, và biết từ nguồn, nhưng bạn nói đúng rằng các tài liệu là từ ngữ kém. – eryksun

Các vấn đề liên quan