我希望将前后条件中的一些常见模式抽象为函数,以使条件更具可读性。从文档中可以看出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
我可以看到删除。
答案 0 :(得分:4)
正确的语法是Global => null
而不是Global => ()
,然后警告就会消失。