2015-07-26 3 views
0

Из 5 типов механизмов передачи параметров: 1.pass-by-value 2.pass-by-reference 3.pass-by-value -result 4.pass-by-text (макросы в C) 5.pass-by-name (что-то вроде продолжения)Разница между вызовом по имени и вызовом с помощью механизма передачи параметров текста с примерами

Я просто хочу разницу между двумя последними. Пожалуйста, помогите !!

Ссылка: http://www.math.grin.edu/~rebelsky/Courses/CS302/99S/Outlines/outline.36.html

+0

Вы должны добавить больше контекста. В отличие от вас, никто из нас не взял этот класс. Честно говоря, это, по-видимому, простая неправильная терминология, которую изобрел ленивый лектор. Предполагая, что это о C, тогда на языке действительно есть только 1 и 2, а 3 - не механизм, а шаблон проектирования, 4 - не передача параметров, а 5 - это нечто совершенно другое. –

+0

Я сам не посещал этот класс. Я прошел через эту ссылку, ища ответ на мой вопрос. Хотя последние два не используются в настоящей реализации передачи параметров на любом языке, я просто хочу пояснить разницу, теоретически, или некоторым примером типа псевдокода. – Deepaank

ответ

0

вызова по тексту, где аргументы функции не оцениваются, прежде чем они передаются, а затем заменить экземпляры параметров. Аргументы передаются «как текст» и поэтому могут вызывать проблемы, если локальная граница функции использует те же имена переменных вне области видимости.

int i = 0; 

void f(int j) { 
    print(j); // is replaced with print(i + 5) and prints 5 
    int i = 20; 
    print(j); // is replaced with print(i + 5) and prints 25 
} 

f(i + 5);  // passes the unevaluated expression i + 5 

Вызов по имени схож в том, что аргументы функции не оценены, прежде чем они передаются, а затем заменить экземпляры параметров. Тем не менее, параметры привязаны к thunks, которые действуют как замыкание переменных в объеме вызывающей функции.

void f(int j) { 
    print(j); // prints 5 
    print(j); // prints 10 
} 

int i = 0; 
f(i + 5);  // passes the unevaluated expression i + 5 

Более подробную информацию можно найти здесь: http://www.cs.sjsu.edu/~pearce/modules/projects/Jedi/params/index.htm