2012-02-07 19 views
5

我有一个快速的Ada问题。如果我有一个程序,我可以可能写出一个变量,或者我可能保持独立,它应该是Out参数或In Out参数吗?我想这可归结为以下问题:Ada中的输入/输出还是输出

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

编译器不会抱怨,因为它看到一个赋值给变量Out ...这恰好是在一个条件,它可能无法达成,而编译器不会刻意去检查所有路径。

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

谢谢!

-prelic

回答

11

在阿达,当与out参数的过程不写任何东西到该参数,传回给调用者的结果是什么不确定。这意味着调用者中的任何变量都会从过程返回时被垃圾覆盖。

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

如果您在调用程序中有某个可能被程序更改,则必须使用in out参数。

Ada 95 RM 6.4.1 (15)

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

+0

谢谢!这里有更多的代表,看起来你非常需要它;) – prelic 2012-02-08 01:32:21