At 2:39 PM -0600 2006-12-11, Perry Smith wrote: >I don't use floats and double much. But the printf man page implies that all >floats are actually passed as doubles. I vaguely recall that to be the case. > >But I doubt if the python thingy knows that. Try not passing >floats. You might >also have problems trying to pass char's and short's (since they are promoted >to int's).
You're right. I should not have passed floats to printf. But the example also showed doubles being mishandled. Here is a more extensive example: import ctypes as ct libc = ct.CDLL("libc.dylib") libc.printf("int=%d double=%f\n", ct.c_int(1), ct.c_double(3.0)) libc.printf("int=%d double=%f double=%f\n", ct.c_int(1), ct.c_double(3.0), ct.c_double(3.0)) On MacOS X this prints: int=1 double=-1.996155 int=1 double=-1.996140 double=0.000000 On a linux box, with a suitably modified ct.CDLL statement, this produces the more reasonable: int=1 double=3.000000 int=1 double=3.000000 double=3.000000 I am totally mystified by the MacOS X results. -- Russell _______________________________________________ Pythonmac-SIG maillist - Pythonmac-SIG@python.org http://mail.python.org/mailman/listinfo/pythonmac-sig