chicken-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Chicken-users] Passing floats to and from foreign functions


From: Jim Ursetto
Subject: Re: [Chicken-users] Passing floats to and from foreign functions
Date: Sat, 11 May 2013 20:14:50 -0500

Hi pluijzer .,

You did not declare a prototype in test.scm (technically, test.c) for the 
functions in wrapper.c.  I believe return values default to int if there is no 
prototype, and the float arg is promoted to double, but I'm not positive.

Anyway, simply add the following to the top of test.scm:

#>
float testGet();
void testSet(float);
<#

Alternatively, put those declarations in wrapper.h and #include it from 
test.scm.

#> #include "wrapper.h" <#

By the way, you don't need easyffi in your test, as you're not using it.

Jim

P.S.

Passing -Wall to the compiler might help discover these errors.  By default, 
clang gives the following output:

test.c:31:19: warning: implicit declaration of function 'testGet' is invalid in 
C99 [-Wimplicit-function-declaration]
C_r=C_flonum(&C_a,testGet());
                  ^
test.c:39:1: warning: implicit declaration of function 'testSet' is invalid in 
C99 [-Wimplicit-function-declaration]
testSet(t0);

On May 11, 2013, at 7:14 PM, "pluijzer ." <address@hidden> wrote:

> Hello everybody,
> I'm having trouble passing floating point numbers to and from foreign 
> functions.
> 
> This is what I'm doing:
> 
> -- test.scm --
> 
> (require-extension easyffi)
> (print ((foreign-lambda float "testGet")))
> ((foreign-lambda void "testSet" float) 4.0)
> (print ((foreign-lambda float "testGet")))
> 
> -- wrapper.c --
> 
> float a = 5.0;
> void testSet(float value) { a = value; }
> float testGet(void) { return a; }
> 
> What I get is this:
> 
> > csc -X easyffi wrapper.c test.scm
> > ./test
> -1080529876.0
> -1080533140.0
> 
> But I expected the output to be:
> 4.0
> 5.0
> 
> I'm I doing something wrong/forgetting something?
> When I use integers instead of floats I do get the desired result.
> 
> Thank you in advance,
> Righard
> 
> _______________________________________________
> Chicken-users mailing list
> address@hidden
> https://lists.nongnu.org/mailman/listinfo/chicken-users




reply via email to

[Prev in Thread] Current Thread [Next in Thread]