Rust 如何在不实现函数的情况下声明函数?

Rust 如何在不实现函数的情况下声明函数?,rust,Rust,我想比较函数的不同实现的组装,但我不想实现某些函数,只需声明它们 在Rust中,前向声明通常是不必要的,因为编译器不需要函数来解析它们(与C中不同)。但是,是否可以执行与转发声明等效的操作?转发声明函数是不可能的。对于Rust中的任何给定实体,只有一个声明 但是,您可以使用未实现的!()和待办事项!()宏,用于快速填充由于某种原因而不想实现的函数体。它们基本上都是panic的别名!()带有特定的错误消息。如果您将函数声明为#[内联(从不)],您将收到函数调用指令,以防止进一步优化 主要的限制是,

我想比较函数的不同实现的组装,但我不想实现某些函数,只需声明它们


在Rust中,前向声明通常是不必要的,因为编译器不需要函数来解析它们(与C中不同)。但是,是否可以执行与转发声明等效的操作?

转发声明函数是不可能的。对于Rust中的任何给定实体,只有一个声明


但是,您可以使用未实现的
!()
待办事项!()
宏,用于快速填充由于某种原因而不想实现的函数体。它们基本上都是
panic的别名!()
带有特定的错误消息。

如果您将函数声明为
#[内联(从不)]
,您将收到函数调用指令,以防止进一步优化

主要的限制是,优化后的函数不能为空,因此它一定会有一些副作用(感谢@hellow建议使用
compiler\u fence
而不是
println!

例如,此代码():

将生成我认为您需要的以下程序集(带有
-O
):

示例::测试循环:
推动r14
推送rbx
推拉
测试edi,edi
jle.LBB0_3
电子数据交换
mov r14,qword ptr[rip+示例::dummy@GOTPCREL]
.LBB0_2:
打电话给r14
加上ebx,-1
jne.LBB0_2
.LBB0_3:
加上rsp,8
流行音乐
流行音乐r14
ret
加上实际为空的
dummy()
代码:

example::dummy:
        ret

出于一个原因:我想将一些函数固定在中,但我不想实现某些函数,只需删除它们。您是否要求
extern
block?但是,这可能会导致链接器错误。如果函数未在代码中调用,则可以使用
未实现来定义它!()
body。你能分享一个预期代码的例子吗?请注意:
panic!()
会将后面的每个代码都标记为不可访问,因此会对其进行优化。那不是我想要的。“我想测试一些函数”-你想看看生成的程序集是什么意思?我也考虑过,但编译器会优化紧急调用,并在之后将每个代码标记为无法访问。所以编译器是正确的,之后的代码是无法访问的。如果你真的想运行一些东西,你不能不去实现它。事实上,在C语言中,你可以直接向前声明函数,生成的程序集将是一个函数调用,然后将继续正常运行。黑盒是你想要的吗@nnnmmm是否可用于函数?在我的例子中,它也是不稳定的(比不安全的更糟糕),因为我想比较不同的稳定编译器
example::dummy:
        ret