2012-02-07 19 views
5

Tengo una pregunta rápida de Ada. Si tengo un procedimiento donde I puede escribir en una variable, o I puede dejarlo en paz, ¿debe ser un parámetro Out o un parámetro In Out? Supongo que esto se reduce a la pregunta:Entrada/salida vs salida en Ada

¿Qué ve la persona que llama si llama a un procedimiento con un parámetro como Out pero el procedimiento no toca el parámetro. ¿Ve el mismo valor? Comportamiento indefinido?

El compilador no se queja porque ve una asignación a la variable Out ... sucede que está en un condicional, donde no se puede alcanzar, y el compilador no se molesta en verificar todas las rutas.

Sospecho que la apuesta segura es marcar el parámetro como In Out, pero me gustaría saber si esto es necesario o solo estilísticamente preferible.

Gracias!

-prelic

Respuesta

11

En Ada, cuando un procedimiento con un parámetro out no escribe nada a ese parámetro, el resultado devuelto a la persona que llama es algo indefinido. Esto significa que lo que haya en esa variable en la persona que llama, se sobrescribe con la basura al regresar del procedimiento.

La mejor práctica en Ada es inicializar definitivamente todos los parámetros out con un valor predeterminado adecuado al inicio del procedimiento. De esta forma, cualquier ruta de acceso de código fuera del procedimiento da como resultado que los datos válidos pasen a la persona que llama.

Si tiene algo en la persona que llama que podría cambiarse por un procedimiento, debe usar un parámetro in out.

Desde el Ada 95 RM 6.4.1 (15):

Para cualquier otro tipo, el parámetro formal es inicializado. Si es compuesto, se evalúa una conversión de vista del parámetro real al subtipo nominal del formal (lo que puede generar Constraint_Error), y el subtipo real del formal es el de la conversión de vista. Si es elemental, el subtipo real de lo formal está dado por su subtipo nominal.

+0

Gracias! Aquí hay un representante más, parece que lo necesitas desesperadamente;) – prelic

Cuestiones relacionadas