Parameters Ada:在过程调用之后,检查OUT参数是否已更改(从NULL)

Parameters Ada:在过程调用之后,检查OUT参数是否已更改(从NULL),parameters,null,ada,out,Parameters,Null,Ada,Out,给定一个具有多个不同类型的OUT参数的过程,所有这些参数都初始化为null,我如何检查它们的值在过程调用后是否发生变化?i、 e.如果它们不再为null 我认为如果(OUTP_1/=null)和(OUTP_2/=null)…,可能有比串接更好的方法。。。那么一切都好:=真 有一个易于应用的解决方案将是非常好的,因为我实际上有很多程序来检查这一点。不追求优雅,而是易于实现 Ada将OUT参数视为未初始化。如果未在过程中为其分配值,则不信任其值 您可以对这些过程运行SPARK分析。火花分析仪将未设

给定一个具有多个不同类型的OUT参数的过程,所有这些参数都初始化为
null
,我如何检查它们的值在过程调用后是否发生变化?i、 e.如果它们不再为
null


我认为如果(OUTP_1/=null)和(OUTP_2/=null)…,可能有比串接
更好的方法。。。那么一切都好:=真


有一个易于应用的解决方案将是非常好的,因为我实际上有很多程序来检查这一点。不追求优雅,而是易于实现

Ada将OUT参数视为未初始化。如果未在过程中为其分配值,则不信任其值

您可以对这些过程运行SPARK分析。火花分析仪将未设置的参数识别为未初始化变量

或者,如果您使用Ada 2012,您可以为每个过程定义post条件。如果使用早期版本的Ada,可以使用PRAGMA ASSERT创建类似的post条件


在调用过程之前将参数设置为NULL对OUT参数没有影响。您似乎混淆了OUT参数和IN-OUT参数。

Ada将OUT参数视为未初始化。如果未在过程中为其分配值,则不信任其值

您可以对这些过程运行SPARK分析。火花分析仪将未设置的参数识别为未初始化变量

或者,如果您使用Ada 2012,您可以为每个过程定义post条件。如果使用早期版本的Ada,可以使用PRAGMA ASSERT创建类似的post条件


在调用过程之前将参数设置为NULL对OUT参数没有影响。您似乎把OUT参数与IN-OUT参数混淆了。

有关于SPARK analytics的指导或教程吗?我使用的是ADA95,所以您可以通过PRAGMA断言扩展post条件的创建吗?如果给OUT参数赋值对它没有影响,它会引起编译器错误还是保持沉默?给OUT参数赋值会对参数产生影响。在为参数指定值之前,OUT参数值将被视为未初始化。Ada 2005增加了Pragma断言。你有没有办法使用更现代的语言版本?SPARK在ADA95上也很难使用。你在这方面用过你的编译器吗?我运行的一个小测试表明,OUT参数的值可能会从初始化值更改,即使在执行过程中没有赋值。这并不完全令人惊讶,因为OUT参数被过程视为未初始化。仅检查NOT NULL不足以确定该值是否已在过程中分配。如果希望能够确保将NULL值保留为初始值,则需要将参数调用模式更改为IN OUT,如果您处理的是遗留代码,这也可能是一个问题。您必须进行危害分析,以确定可能存在的危害。可能出现什么问题,不当行为的后果是什么?OUT和IN OUT参数都会产生副作用。只有IN-OUT参数会对您正在测试的过程产生副作用,只有当过程在更改之前读取IN-OUT值时,这些副作用才是重要的。有关于SPARK analytics的指针或教程吗?我使用的是ADA95,所以您可以通过PRAGMA断言扩展post条件的创建吗?如果给OUT参数赋值对它没有影响,它会引起编译器错误还是保持沉默?给OUT参数赋值会对参数产生影响。在为参数指定值之前,OUT参数值将被视为未初始化。Ada 2005增加了Pragma断言。你有没有办法使用更现代的语言版本?SPARK在ADA95上也很难使用。你在这方面用过你的编译器吗?我运行的一个小测试表明,OUT参数的值可能会从初始化值更改,即使在执行过程中没有赋值。这并不完全令人惊讶,因为OUT参数被过程视为未初始化。仅检查NOT NULL不足以确定该值是否已在过程中分配。如果希望能够确保将NULL值保留为初始值,则需要将参数调用模式更改为IN OUT,如果您处理的是遗留代码,这也可能是一个问题。您必须进行危害分析,以确定可能存在的危害。可能出现什么问题,不当行为的后果是什么?OUT和IN OUT参数都会产生副作用。只有IN-OUT参数将副作用带入您正在测试的过程,并且只有当过程在更改之前读取IN-OUT值时,这些副作用才是重要的。