在C和C++中,您可以通过__func__C99和C++ 11以及___FUNCTION___MSVC 的宏获取当前正在执行的函数的名称.
在Rust中有相同的吗?
__func__C中的示例:
#include "stdio.h"
void funny_hello() {
printf ("Hello from %s\n", __func__);
}
int main() {
funny_hello();
}
Run Code Online (Sandbox Code Playgroud)
输出Hello from funny_hello.
Cargo创建的默认文件树允许并行编译发布和调试版本,因为它们位于自己的目录中; target/release而且target/debug,分别.
同样允许并行编译stable/ nightly-compiler 是多么困难.例如,使用目录
target/debug/stabletarget/debug/nightly我知道它可以用jails /容器来完成,但我希望有更多的货物解决方案.
我有以下代码定义生成文件的路径:
fn gen_test_dir() -> tempdir::TempDir {
tempdir::TempDir::new_in(Path::new("/tmp"), "filesyncer-tests").unwrap()
}
Run Code Online (Sandbox Code Playgroud)
这个函数定义在tests/lib.rs,在该文件的测试中使用,我也想在位于的单元测试中使用它src/lib.rs.
如果不将实用程序功能编译成非测试二进制文件而不重复代码,是否可以实现?
由于测试功能在故障时中止,因此不能简单地在被测功能结束时进行清理.
从其他语言的测试框架来看,通常有一种方法可以设置一个回调来处理每个测试函数末尾的清理.
我正在使用该TempDir结构在磁盘上创建和删除文件夹。在TempDir本身不从它的建筑除了代码中引用。
由于编译器对未使用的对象发出警告,我尝试(取消)将 TempDir-struct 命名为,_但这会导致该结构立即被销毁。
有没有很好的解决方案?
见示例代码,比较one到two:
pub struct Res;
impl Drop for Res {
fn drop(&mut self) {
println!("Dropping self!");
}
}
fn one() {
println!("one");
let r = Res; // <--- Dropping at end of function
// but compiler warns about unused object
println!("Before exit");
}
fn two() {
println!("two");
let _ = Res; // <--- Dropping immediately
println!("Before exit");
}
fn main() {
one();
two(); …Run Code Online (Sandbox Code Playgroud)