#[repr(Int)]enumMyEnum{A(u32),B(f32,u64),C{x:u32,y:u8},D,} 内存布局如下 #[repr(C)]unionMyEnumRepr{A:MyEnumVariantA,B:MyEnumVariantB,C:MyEnumVariantC,D:MyEnumVariantD,}#[repr(Int)]enumMyEnumTag{A,B,C,D}#[repr(C)]structMyEnumVariantA(MyEnumTag,u32);#[repr(C)]str...
repr - 目前接受C,C表示兼容C ABI。 #[repr(C)] enum eType { Operator, Indicator, } 对于struct类型,可以使用 repr - 目前只接受C和packed,C表示结构体兼容C ABI,packed表示移除字段间的padding。 ---
多数情况下 enum 都会这样实现。如果定义时指定 repr(C),那么这个 enum 具有确定的布局,一定会被表示...
在Rust中使用C语言的枚举可以通过使用`#[repr(C)]`属性来指定枚举的表示方式为C语言兼容的方式。这样可以确保Rust的枚举和C语言的枚举在内存中的布局是一致的。 下面是一个简单的示例,演示了如何在Rust中使用C语言的枚举: rust. #[repr(C)] enum MyCEnum {。
}#[repr(u8)]enumMyReprOption<T> {Some(T),None, }assert_eq!(8, size_of::<MyOption<&u16>>());assert_eq!(16, size_of::<MyReprOption<&u16>>()); 空指针优化针对无字段且拥有repr(u*)、repr(i*)或repr(C)的枚举仍然生效。
-C link-arg,等同于Clang的-T。 -C opt-level,相当于Clang的-O(我们主要使用-C opt-level=z来嵌入)。 -C lto,相当于Clang的-flto。 -C force-frame-pointers,相当于Clang的-fno-omit-frame-pointer。 -D warnings大致等同于-Werror。 其他有趣的标志可以在rustc -C帮助下找到,在夜间,可以在rustc -...
Rust 中,枚举分三大类:空枚举(Empty Enum),无字段枚举(Fieldless Enum)和带负载枚举(Data-carrying enum) 。 空枚举指的是:enum Foo;这种形式。空枚举没有变体,是一个空类型,等于!。 无字段枚举,就是我们通常所说的 C-like 枚举。它的变体中不带有额外数据/字段。
我们知道,Rust中,可以对结构体(或 enum 等)添加方法。这是属于面向对象的特性,而纯C是不支持这种特性的。于是,我们必须将这些方法单独实现为一批函数,在这批函数名前面加上统一的前缀,看下面代码: rust 代码 // rust #[repr(C)] struct Foo{ a:isize, ...
-C link-arg,等同于Clang的-T。 -C opt-level,相当于Clang的-O(我们主要使用-C opt-level=z来嵌入)。 -C lto,相当于Clang的-flto。
使用枚举与C代码交互 C代码: 复制 typedef struct { uint8_tstatus;}User;User*create_user(uint8_tstatus); 1. 2. 3. 4. 5. 你可以写一个Rust枚举来表示状态: 复制 #[repr(u8)]#[derive(Debug, PartialEq)]pubenumUserStatus { Active=0,Inactive,Suspended,Deleted,} ...