私はctypesをいじっています...次のCコードがあります
編集:これを理解しようとしている理由は、このブログ投稿をより正確にするためです
sumrange.c
#include <stdio.h>
long sumrange(long);
long sumrange(long arg)
{
long i, x;
x = 0L;
for (i = 0L; i < arg; i++) {
x = x + i;
}
return x;
}
次のコマンドを使用してコンパイルします(OSX上)
$ gcc -shared -Wl,-install_name,sumrange.so -o ./sumrange.so -fPIC ./sumrange.c
Pythonで同じ機能を実装しました:
pysumrange = lambda arg: sum(xrange(arg))
次に、インタラクティブ シェルで両方を実行します。
>>> import ctypes
>>> sumrange = ctypes.CDLL('./sumrange.so')
>>> pysumrange = lambda arg: sum(xrange(arg))
>>> print sumrange.sumrange(10**8), pysumrange(10**8)
... 887459712 4999999950000000
…そして数字が一致しません。これはなぜでしょうか?
unsigned long long
Cコードのすべての変数を効果なしで使用しようとしました(同じ出力)。