1

我有以下鸡的方案代码片段:

(require-extension bind)

(bind* "double int_exp(double, int);")
(bind* "double square(double);")

(begin
    (print (int_exp 1.2 1))
    (print (square 2.0)))

int_exp并且square只是我为测试而编写的小型测试函数(用 C 编写)。此代码工作正常;但是,一旦我删除星号,编译的程序就会打印出虚假值(并且虚假值取决于我是使用 clang 还是 gcc 编译 C 代码。)绑定文档只是“[bind* is]类似于绑定,但也使用foreign-declare”将代码嵌入到生成的方案扩展foreign-declare中,我应该在什么时候使用bind和使用它们之间有什么区别bind*

4

1 回答 1

3

据我所知,bind如果您正在调用的函数已经在您之前#included 的头文件中声明过(包括由 自动包含的任何内容chicken.h,所有 Chicken 程序都包含),则您可以使用。如果您正在调用的函数尚未声明,那么您还需要使用bind*来发出声明。

因此,这将起作用(math.h已包含在 中chicken.h):

(use bind extras)
(bind "double cbrt(double)")
(format #t "cbrt(~a) = ~a~%" 27 (cbrt 27))
于 2013-10-05T19:58:00.857 回答