如何使用Rust的cfg条件编译排除wasm32架构下的代码?
在Rust中实现Wasm架构下的代码排除
Rust的条件编译系统可以轻松实现类似C语言#ifndef WASM的代码排除逻辑,主要有两种常用方式:
1. 属性宏标记非Wasm专属代码
用#[cfg(not(target_arch = "wasm32"))]属性,直接标记仅在非Wasm架构下编译的函数、模块或代码项,完全对应C的#ifndef WASM效果:
#[cfg(not(target_arch = "wasm32"))] fn native_only_func() { // 这段代码只会在原生平台(非Wasm)编译执行 }
2. 代码块内的条件排除
如果是要在函数内部排除某段代码,直接利用cfg!宏的else分支即可——当目标不是wasm32时,执行else块里的内容:
// 示例:根据架构选择执行逻辑 if cfg!(target_arch = "wasm32") { wasm_specific_func(); } else { // 这里就是非Wasm环境专属代码,等价于C的#ifndef WASM包裹的内容 native_only_func(); }
3. 组合条件的进阶用法
如果需要更复杂的判断(比如同时排除Wasm且满足其他特性),可以用all、any和not组合:
// 仅在非Wasm且开启了"native_features"特性时编译 #[cfg(all(not(target_arch = "wasm32"), feature = "native_features"))] fn advanced_native_func() { // 专属逻辑 }
内容的提问来源于stack exchange,提问作者sak
相关产品推荐
相关产品推荐

