2017-05-22 4 views
9

Ich habe ein kleines Testprogramm in Python gemacht, um einige C-Funktionen in vielen Fällen zu testen. Dieses Python-Programm verwenden ctypes, um meine C-Funktionen zu importieren und zu verwenden.Erkennen von C-Typen Grenzen ("limits.h") in Python?

Aber ich möchte auch minimale und maximale Werte Fällen (limits.h 's ULLONG_MAX zum Beispiel) zu testen.

Da einige dieser Grenzwerte jedoch systemabhängig sein können, würde ich es vorziehen, sie nicht in meinem Programm zu programmieren. Ich würde es lieber dynamisch bekommen.

Ist es möglich, diese Grenzwerte in Python zu erhalten?

+0

Mögliche Duplikate von [Wie kann ich #defines in einer C-Datei von Python referenzieren?] (Https://stackoverflow.com/questions/12147394/how-can-i-reference-defines-in-ac-file- from-python) – nitzanms

Antwort

6

Ich glaube, die nächste Sie bekommen können

ctypes.sizeof(whatever_type) 

ist, die die Größe des Typs in Bytes gibt. Zum Beispiel können Sie ctypes.sizeof(ctypes.c_int) verwenden, um herauszufinden, ob ein Byte 4 Bytes, 8 oder irgendeine andere seltsame Zahl ist.

+1

Oder nehmen Sie das Zweierkomplement und verwenden Sie einen negativen -1-Wert mit dem entsprechenden vorzeichenlosen Typ, z 'c_uint (-1) .value 'für das vorzeichenlose Limit und dividiere das vorzeichenlose Maximum durch 2, um das vorzeichenbehaftete Maximum zu erhalten. – eryksun

+0

@eryksun: Alles, was ich in den Dokumenten über das Übergeben eines Werts außerhalb des Bereichs gefunden habe, ist, dass "keine Überlaufüberprüfung durchgeführt wird", also weiß ich nicht, ob 'c_uint (-1)' tatsächlich unterstützt wird. – user2357112

+1

Keine Überlaufprüfung bedeutet, dass es überläuft, ohne eine Ausnahme auszulösen. Darauf vertraue ich und weiß von der Quelle, aber du hast Recht, dass die Dokumente schlecht formuliert sind. – eryksun