Я взаимодействую с этим кодом C:
extern "C" void print_int(short a, int b, long c, long long d)
{
printf("%hi %i %li %lli", a, b, c, d);
}
с этим кодом Python:
from ctypes import *
lib=cdll.LoadLibrary("./libtest.so")
lib.print_int(1,2,3,4)
Даже если я не приведу аргументы в коде print_int
, онипрошло правильно, и я получаю:
1 2 3 4
, как и ожидалось. Почему ctypes не могут создавать одинаковые числа с плавающей запятой? Следующий фрагмент:
extern "C" void print_float(float a, double b, long double c)
{
printf("%f %lf %Lf", a, b, c);
}
потребует явного приведения из ctypes в противном случае возникает исключение.
lib.print_float(c_float(1.0), c_double(2.0), c_longdouble(3.0))
Я работаю в Unix, компилирую с cdecl соглашение о вызовах, если это имеет значение.