有一个可变参数的C函数,我不能在宏之外调用。这个宏应该是公共的,但是具有可变参数的C函数不应该是可见的。
有没有办法只让它在宏内可见?或者也许是一种将函数保留在文档之外的方法?
答案 0 :(得分:5)
你唯一能做的就是隐藏这样的"内部"这些符号不会出现在文档中。例如:
#[macro_export]
macro_rules! custom_abort {
($($args:tt)*) => {
match format!($($args)*) {
msg => $crate::custom_abort__(&msg)
}
};
}
/// This is an implementation detail and *should not* be called directly!
#[doc(hidden)]
pub fn custom_abort__(msg: &str) -> ! {
use std::io::Write;
let _ = writeln!(std::io::stderr(), "{}", msg);
std::process::exit(1);
}
正如您所料,这绝对不会阻止某人直接致电custom_abort__
。但实际上,如果有人在评论中忽略警告并且无论如何都会这样做,那么当代码中断时,请随意嘲笑它们。