我有以下鸡的Scheme代码片段:
(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代码。)绑定文档只是says“[bind * is]类似于bind,但也使用foreign-declare
“and”[foreign-declare
包含]将代码嵌入生成的Scheme扩展中,并将字符串逐字地生成到生成文件的标题中“ - 既不特别有用我是鸡的新手(实际上是Scheme。)他们实际上是什么意思,bind
和bind*
之间的区别是什么?我应该何时使用?
答案 0 :(得分:3)
据我所知,如果您调用的函数已在先前bind
d的头文件中声明(包括{{1}自动包含的内容,则使用#include
所有Chicken程序都包括在内)。如果您正在调用的函数尚未声明,那么您还需要使用chicken.h
发出声明。
因此,这可行(bind*
已包含math.h
):
chicken.h