EiffelStudio 在启用合同的情况下完成

EiffelStudio finalize with contracts enabled

如何生成启用合同检查的最终可执行文件?保持 check 语句完整是可能的,但是我们可以保持所有 pre/postconditions 和 class 不变量吗?

我需要这个来测试计算量大的应用程序,frozen with contracts 可执行文件在我的情况下有点太慢了。

IDE 显示了一个请求完成的对话框,询问是否应将断言保留在生成的可执行文件中。该对话框是可丢弃的。如果您 select 复选框“ 不再询问我 ”,将不会生成断言并且 IDE 将不再显示此对话框。您可以通过转到参数(例如,从主菜单:工具 | 参数)来重置此 selection,然后恢复Interface 下完成对话框的默认值 | 对话框.

在命令行中,编译器在 -finalize 之后接受一个选项 -keep。它告诉编译器在完成可执行文件时保留断言。

IDE 和编译器都选择应该从项目设置中生成断言的设置。您可以为每个组 (system/library/cluster) 和每个 class 单独指定它们。

编辑。这是一个包含 2 个文件的最小示例:

example.e:

class EXAMPLE create make feature
    make
        local
            n: INTEGER
        do
            if n = 0 then f
            elseif n = 1 then g
            end
        rescue
            n := n + 1
            print ({EXCEPTIONS}.tag_name)
            retry
        end
    f require pre: out = "x" do end
    g do ensure post: out = "x" end
end

example.ecf:

<?xml version="1.0" encoding="ISO-8859-1"?>
<system xmlns="http://www.eiffel.com/developers/xml/configuration-1-21-0" name="example">
    <target name="example">
        <root class="EXAMPLE" feature="make"/>
        <option>
            <assertions precondition="true" postcondition="true"/>
        </option>
        <setting name="console_application" value="true"/>
        <library name="base" location="$ISE_LIBRARY\library\base\base.ecf"/>
        <cluster name="test" location="."/>
    </target>
</system>

使用选项 -finalize -keep -config example.ecf -c_compile 编译生成打印 prepost.

的可执行文件