我有一个简短的艾达问题。如果我有一个程序may写出一个变量,或者我might不用管它,它应该是一个Out
参数或In Out
范围?我想这可以归结为一个问题:
如果调用者调用参数如下的过程,它会看到什么Out
但该过程不触及参数。它看到相同的值吗?未定义的行为?
编译器不会抱怨,因为它看到了对Out
变量...它恰好位于条件中,可能无法到达它,并且编译器不会费心检查所有路径。
我怀疑安全的赌注是将参数标记为In Out
,但我想知道这是否有必要或者只是在风格上更可取。
Thanks!
-prelic
在 Ada 中,当一个过程带有out
参数不会向该参数写入任何内容,传回调用者的结果是不明确的。这意味着调用者中该变量中的任何内容都会在从过程返回时被垃圾覆盖。
Ada 中的最佳实践是明确初始化所有out
在程序开始时使用合适的默认值的参数。这样,过程之外的任何代码路径都会将有效数据传回调用者。
如果调用者中有一些内容might如果要通过程序进行更改,则必须使用in out
范围。
来自艾达95 RM 6.4.1 (15) http://www.adaic.org/resources/add_content/standards/05rm/html/RM-6-4-1.html:
对于任何其他类型,形式参数未初始化。如果是复合的,则评估实际参数到形式的名义子类型的视图转换(这可能会引发 Constraint_Error),并且形式的实际子类型是视图转换的子类型。如果是基本形式,形式的实际子类型由其名义子类型给出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)