2017-05-22 6 views
9

私は多くの場合、いくつかのC関数をテストするためにPythonで少しテストプログラムを作っています。このPythonプログラムは、​​を使用してC関数をインポートして使用します。PythonでCの型制限( "limits.h")を検出していますか?

しかし、最小値と最大値のケース(たとえばlimits.hULLONG_MAX)もテストしたいと思います。

しかし、これらの制限の一部はシステムに依存する可能性があるので、プログラムでハードコーディングを避けることをお勧めします。私はむしろ動的に取得したいと思います。

これらの制限値をPythonで取得することは可能ですか?

+0

[Cファイルの#definesをPythonからどのように参照できますか?](https://stackoverflow.com/questions/12147394/how-can-i-reference-defines-in-ac-file- from-python) – nitzanms

答えて

6

私はあなたが得ることができる最も近いがあなたにバイト単位の種類の大きさを与える

ctypes.sizeof(whatever_type) 

であると考えています。たとえば、ctypes.sizeof(ctypes.c_int)を使用して、1バイトが4バイト、8バイト、またはその他の奇妙な数であるかどうかを調べることができます。

+1

2の補数を仮定し、負の-1の値に対応する符号なしの型を使用します。 unsigned maxの場合は 'c_uint(-1).value'を、符号なしmaxを得る場合はunsigned maxを2で割ります。 – eryksun

+0

@eryksun:範囲外の値を渡すことについてドキュメントで見つかったのは、「オーバーフローチェックが行われていない」ということです。したがって、 'c_uint(-1)'が実際にサポートされているかどうかわかりません。 – user2357112

+1

オーバーフローチェックは、例外を発生させずにオーバーフローすることを意味しません。それは私が頼りにしていることであり、ソースから知っていますが、あなたはドキュメントがあまり言い表せられていないことは間違いありません。 – eryksun

関連する問題