【问题标题】:In/Out vs Out in AdaAda 中的 In/Out 与 Out
【发布时间】:2012-02-07 23:09:28
【问题描述】:

我有一个简短的 Ada 问题。如果我有一个可能写入变量的过程,或者我可能不理会它,它应该是Out参数还是In Out参数?我想这归结为一个问题:

如果调用者调用一个参数为Out 的过程但过程没有触及参数,调用者会看到什么。它看到相同的值吗?未定义的行为?

编译器不会抱怨,因为它看到了对 Out 变量的赋值...它只是碰巧处于条件中,可能无法到达,并且编译器不会费心检查所有路径.

我怀疑安全的赌注是将参数标记为In Out,但我想知道这是否有必要或只是在风格上更可取。

谢谢!

-prelic

【问题讨论】:

    标签: ada


    【解决方案1】:

    在 Ada 中,当带有out 参数的过程没有向该参数写入任何内容时,传回调用者的结果是未定义。这意味着调用者中该变量中的任何内容都会在从过程返回时被垃圾覆盖。

    Ada 中的最佳实践是在过程开始时使用合适的默认值明确地初始化所有out 参数。这样,过程之外的任何代码路径都会导致将有效数据传回给调用者。

    如果调用者中有一些内容可能被过程更改,则必须使用in out 参数。

    来自Ada 95 RM 6.4.1 (15)

    对于任何其他类型,形式参数未初始化。如果是复合的,则评估实际参数到形式的名义子类型的视图转换(这可能会引发 Constraint_Error),并且形式的实际子类型是视图转换的子类型。如果是基本的,形式的实际子类型由其名义子类型给出。

    【讨论】:

    • 谢谢!这里还有一些代表,看起来你非常需要它;)
    猜你喜欢
    • 1970-01-01
    • 2014-08-13
    • 2015-12-14
    • 2020-12-20
    • 1970-01-01
    • 2017-07-31
    • 2021-08-03
    • 2010-12-07
    • 2016-07-30
    相关资源
    最近更新 更多