wan*_*021 6 conditional-compilation rust
cargo build以下代码运行将成功:
#[cfg(test)]
mod tests {
#[test]
fn func() {
let x = 1;
sss
}
}
Run Code Online (Sandbox Code Playgroud)
但此代码会失败:
#[cfg(test)]
mod tests {
#[test]
fn func() {
sss
let x = 1;
}
}
Run Code Online (Sandbox Code Playgroud)
#[cfg(test)]
mod tests {
#[test]
fn func() {
let x = 1;
sss
}
}
Run Code Online (Sandbox Code Playgroud)
《Rust Book》中关于测试组织的一节说:
测试模块上的注释
#[cfg(test)]告诉 Rust 仅在运行时编译并运行测试代码cargo test,而不是在运行时编译 和运行测试代码cargo build。
那么为什么 Rust 仍然可以编译mod tests带有 注释的代码#[cfg(test)]呢?
未编译的代码在语法上cfg仍然必须有效(即成功解析),但仅此而已。
在第一个代码中,let x = 1;是一个普通的变量声明语句,并且是一个从函数sss返回值的尾部表达式。未定义,因此该代码当然无效,但在语法上是有效的。ssssss
然而,在第二个片段中,您有sss- 这是一个表达式,并且必须有一个尾随分号,但事实并非如此。该代码在语法上无效,并且它是cfg门控这一事实并不重要。
| 归档时间: |
|
| 查看次数: |
297 次 |
| 最近记录: |