我有一个使用C99 bool数据类型的库,我想通过FFI调用它.
Haskell中C99 bool的对应类型是什么?在Foreign.C.types中有CInt,CShort等,但没有CBool.
如果没有"正确"类型bool,那么在函数中传递的安全替代类型是bool什么?
另一种方法是修改C库,但我希望保持原样.
Mik*_*kov 12
由于sizeof(_Bool)是在C99中实现定义的(参见ISO/IEC 9899:1999 6.2.5,6.2.6和6.5.3.4/4),明显的可移植解决方案是通过使用int而不是使用的包装来调用这些函数bool.或者,如果您不关心可移植性,可以查看编译器的文档以找出sizeof(_Bool)您的平台上的内容并使用相应的FFI类型.
我猜测CBool缺席的原因Foreign.C.Types是底层的C实现不会支持C99的所有功能.一个非常广泛使用的编译器(MSVC)根本不支持C99.