Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell中的FFI,关于语言CPP的问题以及如何将c结构与FFI一起使用_Haskell_Ffi - Fatal编程技术网

Haskell中的FFI,关于语言CPP的问题以及如何将c结构与FFI一起使用

Haskell中的FFI,关于语言CPP的问题以及如何将c结构与FFI一起使用,haskell,ffi,Haskell,Ffi,我对哈斯克尔的外国金融机构有一些问题 我知道我必须使用pragma语言{-#language ForeignFunctionInterface},但是当我使用{-#language CPP,ForeignFunctionInterface}时,我可以对CPP做什么“更多”呢 我在c语言中使用一个函数,它使用一个结构,在FFI中如何处理这个问题 当我必须使用CInt和仅使用Int时 如果启用CPP语言扩展,则可以合法地将C预处理器语法合并到Haskell程序中 访问结构要复杂一点。最简单的方法可能

我对哈斯克尔的外国金融机构有一些问题

  • 我知道我必须使用pragma语言
    {-#language ForeignFunctionInterface}
    ,但是当我使用
    {-#language CPP,ForeignFunctionInterface}
    时,我可以对CPP做什么“更多”呢
  • 我在c语言中使用一个函数,它使用一个
    结构
    ,在FFI中如何处理这个问题
  • 当我必须使用
    CInt
    和仅使用
    Int
  • 如果启用
    CPP
    语言扩展,则可以合法地将C预处理器语法合并到Haskell程序中
  • 访问结构要复杂一点。最简单的方法可能是为结构的每个字段定义
    peek
    poke
    方法。这个工具可以帮助你
  • 无论何时需要将Haskell
    Int
    传递到C或从C传递出去,都可以使用
    CInt
    ,因为这将确保进行任何所需的编组(同样适用于
    CDouble
    CString
    等)
  • X11包具有通过FFI定义和编组结构的功能


    更多信息请访问:

  • CPP
    是C预处理器。它允许您使用条件编译和makros。通常,您不需要这样做,但一旦有了依赖于平台的代码,它就会变得很有用,其中要编译的代码由外部脚本决定(如autotools)
  • 看看
  • 仅对直接导入使用
    Cint
    。编写高级绑定时,请切换到
    Int
    ,因为它不需要用户导入所需的库,并且是Haskell标准

  • 我有一个c函数,比如:int foo();我必须在haskell签名Int或CInt中书写,直到我jzst使用Int end allwork@ewggwegw:对于其自身的功能,请使用CInt。根据您的平台,使用Int可能有效,也可能无效。
    foreign import ccall“foo”c_foo::IO CInt