有一个可变参数的C函数,我无法在宏之外调用.该宏应该是公共的,但具有可变参数的C函数不应该是可见的.
有没有办法只让它在宏内部可见?或者也许是一种将函数保留在文档之外的方法?
您唯一能做的就是隐藏这些"内部"符号,使它们不会出现在文档中.例如:
#[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);
}
Run Code Online (Sandbox Code Playgroud)
正如您所料,这绝对不会阻止某人custom_abort__直接打电话.但实际上,如果有人在评论中忽略警告并且无论如何都会这样做,请在代码中断时随意嘲笑他们.