我对Haskell中的FFI有一些疑问
{-# LANGUAGE ForeignFunctionInterface #-}
但是当我使用{-# LANGUAGE CPP, ForeignFunctionInterface #-}
我可以用CPP做什么“更多”时有什么区别struct
的函数,如何在FFI中处理这个?CInt
时才使用Int
?答案 0 :(得分:6)
CPP
语言扩展,则可以合法地将C预处理器语法包含在Haskell程序中。Storable
typeclass为结构的每个字段定义peek
和poke
方法。 hsc2hs工具可以提供帮助。CInt
传递给C或从C传递,就会使用Int
,因为这将确保发生任何所需的编组(同样适用于CDouble
,{{1}等等)。X11软件包通过FFI具有many examples个定义和编组结构。
更多信息:
答案 1 :(得分:3)
CPP
是C预处理器。它允许您使用条件编译和makros。通常,您不需要这个,但只要您拥有与平台相关的代码,它就会变得有用,编译代码由外部脚本决定(就像使用autotools一样)。Cint
用于直接导入。编写高级绑定时,切换到Int
,因为它不需要用户导入所需的库并且是Haskell标准