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
16KB
85 行
abibool - C ABI兼容的布尔类型
对于大多数合理的Rust API,您应该首选接口中的bool并在类型之间进行简单转换。然而,bool并不是所有位模式都合法,这使得在大多数FFI中不进行转换的情况下不可用。对于简单的FFI,这不是问题,但C API编写BOOL或BOOLEAN数组,或包含这些类型的结构,会变得有问题,需要分配和复制以避免未定义行为。或者,您可以选择使用整数类型,这可能会掩盖意图,并在您期望布尔逻辑时直接比较多个具有不同值但都为真时导致错误。
类型映射
请注意,这非常依赖于系统。例如,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 ,但有时是 bool 或 unsigned char |
jboolean (Java / JNI) |
b8 / bool8 |
参考
- BOOL / bool / Boolean / NSCFBoolean - Objective C 真值类型
许可
受以下任一许可协议的约束:
- Apache License, Version 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确声明,否则你故意提交的任何贡献,根据 Apache-2.0 许可证定义,将如上所述双重许可,不附加任何额外条款或条件。
依赖
~34KB