使用FFI时,C99 bool的等效Haskell类型是什么?

Zou*_*pen 18 haskell c99 ffi

我有一个使用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.