2012-04-24 2 views
1

quel sera le résultat du programme C-like suivant, si le mécanisme de transmission de paramètres est copy-in-copy-out, comme dans out dans Ada ? Pendant l'exécution de swap(v, list[v]), v sera mis à jour à 3. Lors de la copie, le résultat du deuxième paramètre sera-t-il copié sur list[3] ou list[1]?paramètre copy-in-copy-out (valeur-résultat paramètre passing)

swap(int x, int y){ 
    int t = x; 
    x = y; 
    y = t; 
} 

main(){ 
    v = 1; 
    int list[5] = {1,3,5,7,9}; 
    swap(v, list[v]); 
    print v, list[0...4]; 
} 
+0

Est-ce que c'est un devoir? – deceze

+0

Oui, exactement ... – ZHOU

+2

Comme il s'agit de devoirs, y at-il une raison pour laquelle vous n'avez pas écrit un programme Ada pour le savoir? – NWS

Répondre

3

paramètre Ada est le méchanisme passant pas copie en copie sur. Ada n'est pas comme C, où le mechanisim est explicite et le compilateur le suivra même s'il serait stupide de le faire.

Il existe des situations spécifiques où la langue spécifie que les éléments sont transmis par référence. Sinon, cela dépend du compilateur et vous n'êtes pas autorisé à utiliser un mécanisme plutôt qu'un autre. En pratique, compilateurs feront la chose sensée, qui se résume habituellement à copier si l'objet s'inscrit dans un registre de la machine, et la référence autrement. Ce qui se passe dans une version Ada du code C que vous avez indiqué dépend de la manière exacte dont vous le traduisez vers Ada. Je soupçonne que ce que vous trouverez quand vous le faites est que des choses qui auraient causé un comportement potentiellement surprenant en C, le compilateur Ada ne vous laissera pas faire, ou il vous forcera à documenter de telle sorte qu'il ne ressemble plus wierd.

0

Les paramètres sont liés avant l'exécution de l'appel, donc x est lié à v et y est lié à list [1].

Questions connexes