2017-05-29 3 views
-7
begin 
integer n; 
procedure p(k: integer); 
    begin 
    print(n); 
    end; 
n := 5; 
p(n/0); 
end; 

sortie: appel par valeur: division par zéro erreur appel par nom: 5pourquoi appeler par nom ne donne pas d'erreur comme diviser par zéro dans le code suivant?

+6

Cela ressemble à Pascal, et non C. – dbush

+1

Sur un appel par appel de valeur, le paramètre est exécutée avant la Ainsi, 'n/0' est exécuté avant d'appeler' p', qui se divise par 0. Lors d'un appel par appel de nom, le paramètre est ** retardé **, et, comme il n'est jamais utilisé dans 'p' (vous 'r' impression 'n', pas le paramètre' k'), alors la division n'arrive jamais, et aucune erreur n'est levée.En outre, ce n'est pas C. – paulotorrens

+0

Êtes-vous en train de dire que le code compile? Dans quel compilateur Pascal? – MartynA

Répondre

-1

paramètre de la procédure P est entier, mais lors de l'appel avec n/0, n/0 le type est réel, ce n'est pas compatible.

Et en Pascal, vous ne pouvez pas créer de nouvelle procédure entre début fin.

(Votre code ressemble mixte de C et Pascal)

Désolé mon anglais :(