int i=1; |
i.0=1. |
main() { |
|
auto int i, j; |
Переменные i.1 и j.1 определяются, но значений у них нет. |
i.1=reset(); |
В качестве значения i. 1 получает результат, возвращаемый reset. |
reset() { |
|
return(i.0); |
Поскольку reset не имеет параметров и локальных переменных с именем i, то появление i относится к i.0. Функция reset выдает 1, так что i.1=1. |
} |
|
for ( j.1=1; j.1<=3; j.1++ ) { |
j.1=1. |
PRINT2(d,i.1,j.1); PRINT1(d,next(i.1)); int next(1) |
|
{ (int i=1;) |
j.next=1. |
return( j.next=i.0++ ); |
i.0=2, но next выдает 1, так как операция увеличения выполняется после того, как будет взято значение i.0.
Оператор возврата ссылается на i.0, так как в next нет других переменных с именем i. После выполнения оператора возврата j.next исчезает. |
} PRINT1(d,last(i.1)); int last(1) |
|
{(int j=1;) |
j.last=1. |
static int i=10; |
i.last=10.
В last есть своя переменная с именем i, инициируемая значением 10. Класс памяти i - static, а это означает, что i инициируется при загрузке программы и исчезает, когда программа заканчивается. |
return(j.last=i.last--); |
Переменная i.last=9, но выдается значение 10, так как уменьшение переменной происходит после использования ее значения.
После возврата j.last исчезает, но i.last остается, и когда вновь обращаемся к last, то i будет равно 9. |
} PRINT1(d,new(i.1+j.1)); int new(2) |
|
{(int i=2;) |
i.new=2. |
int j=10; |
j.new=10. |
return(i.new=j.new+=i.new); |
j.new=12, i.new=12 и выдается значение 12. |
} |
После возврата j.new и i.new исчезают. |
for ( j.1=1; j.1<=3; j.1++ ) { |
j.1=2.
Возвращаемся к оператору for. Для этого шага опишем в общих чертах действие каждого оператора. |
PRINT2(d,i.1,j.1); |
Выполнение тела цикла приводит к увеличению j.1 на 1, но значение i.1 не меняется. |
PRINT1(d,next(i.1)); |
Функция next игнорирует значение передаваемого параметра и возвращает текущее значение i.0. Побочным эффектом выполнения next будет увеличение i.0 на 1. |
PRINT1(d,last(i.1)); |
Функция last также игнорирует значение передаваемого параметра. Выдается текущее значение локальной статической переменной i.last. Побочный эффект выполнения last - уменьшение i.last на 1. |
PRINT1(d,new(i.1+j.1)); |
Функция new выдает значение своего параметра плюс 10. Побочных эффектов нет. |
} } |
|