4个版本

0.5.3 2022年8月21日
0.5.2 2022年8月9日
0.5.1 2020年11月29日
0.5.0 2020年11月29日

FFI中排名182

每月下载49
用于 5 crates

Apache-2.0 OR MIT

16KB
85

abibool - C ABI兼容的布尔类型

GitHub crates.io docs.rs License Build Status

对于大多数合理的Rust API,您应该首选接口中的bool并在类型之间进行简单转换。然而,bool并不是所有位模式都合法,这使得在大多数FFI中不进行转换的情况下不可用。对于简单的FFI,这不是问题,但C API编写BOOLBOOLEAN数组,或包含这些类型的结构,会变得有问题,需要分配和复制以避免未定义行为。或者,您可以选择使用整数类型,这可能会掩盖意图,并在您期望布尔逻辑时直接比较多个具有不同值但都为真时导致错误。

类型映射

请注意,这非常依赖于系统。例如,Windows的BOOL是4字节,但OS X可能是1字节...
当使用abibool编写FFI crates时,您可能希望在构建脚本中使用cc大量的static_assert来验证您的底层C类型的大小。

C/C++类型 abibool类型 说明
bool (C++) 变化 通常是1字节,但有时是4或更差
_Bool (C99 / stdbool.h) 变化 通常是1字节,但有时是4或更差
BOOLEAN (Win32) b8 / bool8
BOOL (Win32) b32 / bool32
BOOL (OS X / objc.h) b8 / bool8 ? 通常是 signed char,但有时是 boolunsigned char
jboolean (Java / JNI) b8 / bool8

参考

许可

受以下任一许可协议的约束:

任选其一。

贡献

除非你明确声明,否则你故意提交的任何贡献,根据 Apache-2.0 许可证定义,将如上所述双重许可,不附加任何额外条款或条件。

依赖

~34KB