SPARK 2014中鬼功能的编译

时间:2014-09-02 17:24:33

标签: ada

我希望将前后条件中的一些常见模式抽象为函数,以使条件更具可读性。从文档中可以看出ghost函数解决了这个问题。

我依赖于在断言中消除溢出的事实(通过配置编译指示),所以我不相信我可以使用带代码的ghost函数。 SPARK文档包含以下http://docs.adacore.com/spark2014-docs/html/ug/spark_2014.html#ghost-functions中没有代码的ghost函数示例:

function A_Nonexecutable_Ghost_Function (Lo, Hi : Natural) return Natural
with Pre        => Lo <= Hi,
     Post       => A_Nonexecutable_Ghost_Function'Result in Lo .. Hi,
     Convention => Ghost,
     Import;
-- The body of the function is not declared elsewhere.

然而,这个,以及我尝试编写的任何其他鬼功能,都会产生:

warning: null global effect assumed on imported subprogram

该警告会停止编译。试图说Global => ()不起作用。我可以压制警告吗? gnatprove命令行上没有明显-Werror我可以看到删除。

1 个答案:

答案 0 :(得分:4)

正确的语法是Global => null而不是Global => (),然后警告就会消失。