extern int sp; extern double
в файле 1: ----------
int sp = 0; /* stack pointer */ double val[maxval]; /* value stack */
в файле 2: ----------
extern int sp; extern double val[];
double push(f) {...}
double pop() {...}
clear() {...}
так как описания extern 'в файле 1' находятся выше и вне трех указанных функций, они относятся ко всем ним; одного набора описаний достаточно для всего 'файла 2'.
Для программ большого размера обсуждаемая позже в этой лекции возможность включения файлов, #include, позволяет иметь во всей программе только одну копию описаний extern и вставлять ее в каждый исходный файл во время его компиляции.
Обратимся теперь к функции getop, выбирающей из файла ввода следующую операцию или операнд. Основная задача проста: пропустить пробелы, знаки табуляции и новые строки. Если следующий символ отличен от цифры и десятичной точки, то возвратить его. В противном случае собрать строку цифр /она может включать десятичную точку/ и возвратить number как сигнал о том, что выбрано число.
процедура существенно усложняется, если стремиться правильно обрабатывать ситуацию, когда вводимое число оказывается слишком длинным. функция getop считывает цифры подряд /возможно с десятичной точкой/ и запоминает их, пока последовательность не прерывается. Если при этом не происходит переполнения, то функция возвращает number и строку цифр. Если же число оказывается слишком длинным, то getop отбрасывает остальную часть строки из файла ввода, так что пользователь может просто перепечатать эту строку с места ошибки; функция возвращает toobig как сигнал о переполнении.
getop(s, lim) /* get next oprerator or operand */ char s[]; int lim; { int i, c;
while((c=getch())==' '\!\! c=='\t' \!\! c=='\n') ; if (c != '.' && (c < '0' \!\! c > '9')) return(c); s[0] = c; for(i=1; (c=getchar()) >='0' && c <= '9'; i++) if (i < lim)
s[i] = c; if (c == '.') { /* collect fraction */ if (i < lim) s[i] = c; for(i++;(c=getchar()) >='0' && c<='9';i++) if (i < lim) s[i] =c; } if (i < lim) { /* number is ok */ ungetch(c); s[i] = '\0'; return (number);
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий