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