Je suis nouveau sur Ada.Ada sur le paramètre
J'ai vu ce question, mais le mien est un peu différent:
type A is record
x : integer;
y : integer;
end record;
procedure P1 is
temp : A;
begin
temp.x := 100;
P2(temp);
if temp.x = 100 then
Ada.Text_IO.Put_Line("true");
else
Ada.Text_IO.Put_Line("false");
end if;
end One;
procedure P2 (arg1 : out A) is
begin
arg1.y := 200;
end P2;
Ma question est avec le paramètre « out » dans P2: seront d'autres parties d'un type composite sont indéfinis si P2 n'a pas explicitement définissez-les. En d'autres termes, si P1 est appelée, la sortie sera-t-elle définitivement vraie ou fausse? Ou peut-être ambigu?
Cette link parle de "l'initialisation par défaut", mais mon exemple ci-dessus ne l'a pas explicitement (volontairement).
Safety is preserved by ensuring that a subcomponent does not become
"deinitialized" by being passed as an out parameter. If any subcomponent
of a type passed by copy has default initialization, then the whole
object is copied in at the start of the call so that the value of such a
subcomponent is not lost as a result of a subprogram call during which
no assignment is made to the subcomponent. But in practice records are
usually passed by reference anyway.
Je ne suis pas sûr que ce soit un comportement spécifique au compilateur? Est-ce qu'un compilateur capable de passer par copie se comporterait de la même manière?J'essaierais de ne pas risquer! –
Merci @trashgod. Si elle dépend du compilateur, alors utilisez "in out" le seul moyen sûr de vous assurer que cela fonctionne (si vous n'êtes pas sûr que l'enregistrement transmis a une initialisation par défaut): 'procédure P2 (arg1: in out A) est ' ' begin' 'arg1.y: = 200;' 'fin P2;' –
@TNguyen: J'ai développé plus haut. – trashgod