如果代码合同可以进行静态检查并确保一切正确,我为什么要允许 ccrewrite 重写二进制文件?
完全关闭ccrewrite正常吗?
如果代码合同可以进行静态检查并确保一切正确?
只有当它是关于一个完整的应用程序并且你不需要Assume()
任何东西时才会持有。
在所有其他情况下(可重用的库组件等)代码契约可以验证内部逻辑,但没有什么可以替代Requires()
前门的。
在 Code Contracts 论坛上经常提出的另一点是静态验证器可以并且确实存在错误。
还有一点,如果在每个构建中都使用静态验证器,它可能会非常慢。
您可以通过将运行时检查与单元测试结合使用来锻炼您的代码并发现问题来弥补这一点。