|
Программирование >> Формирование пользовательского контейнера
0123456789 Обратите внимание на то, что встроенная библиотечная функция getchar О использует в этом прогоне буферизацию строки, благодаря которой символы, посылаемые функцией putchar (), не выводятся на экран до тех пор, пока не нажата клавиша <Enter>. Такое поведение - результат работы реальной функции getchar (), вызываемой интерпретатором Mini С++. Как вы знаете. cout \n ; Оператор do-while. cout \nEnter characters, q to quit.Xn ; do { Использует две функции стандартной библиотеки . ch = getchar () ; putchar(ch); } while(ch != -q); cout , \n\n ; Оператор for. for(a=0; a<10; ++a) { cout a ; cout \n\nDone!\n ; return 0; Далее приведен пример вывода программы из листинга 9.10. Enter а number: 10 100 81 64 49 36 25 16 9 4 1 Enter characters, q to quit. This is test, q This is test, q Листинг SCll. Демонстрационная программа 7 Демонстрирует вложенные области видимости. int х; глобальная х int main О { int i; i = 4; x = 99; глобальной переменной х присваиваивается значение 99 if(i == 4) { int х; локальная х int num; локальная для оператора if x 5: i * 2; cout Outer local x before loop: x \n ; while (x-) { int x; другая локальная x x = 18; cout Inner local x: x \n ; cout Outer local x after loop: x \n ; большинство компиляторов реализуют функцию getchar о с буферизацией строки. Вывод - встроенная функция Mini С++ ведет себя так же, как и лежащая в ее основе библиотечная функция. Программа, приведенная в листинге 9.11, демонстрирует обработку вложенных областей видимости. В ней переменная х объявляется три раза: сначала как глобальная переменная, потом как локальная переменная в блоке оператора if и, наконец, снова в блоке цикла while. Все три объявления независимы и отличаются друг от друга. Усовершенствование интерпретатора Mini С++ Mini С++ разрабатывался так, чтобы было легко следить за его функционированием. Основной целью было создание интерпретатора, принцип действия которого можно понять без особых усилий. Он также разрабатывался с учетом возможного расширения. Поэтому интерпретатор Mini С++ не особенно быстр и эффективен, но содержит базовую структуру, производительность которой можно повысить с помощью следующих действий. Практически все коммерческие интерпретаторы расширяют роль процедуры предварительного просмотра. Весь исходный код профаммы переводится из удобной для чтения формы во внутренний формат. В этом формате все переменные и сфоки, кроме заключенных в кавычки, преобразованы в целочисленные лексемы, подобно тому, как Mini С++ преобразует ключевые слова языка С++ в целочисленные лексемы. Вы, вероятно, заметили, что Mini С++ проводит ряд сравнений строк. Например, каждый раз, когда ведется поиск той или иной функции или переменной, требуется несколько сравнений строк. Подобные сравнения занимают много времени, а если заменить сфоки целочисленными лексемами, можно использовать гораздо Не может ссылаться здесь на num, так как она локальная для предшествующего блока if. num = 10; cout Global x: x \n ; } Далее приведен вывод программы из листинга 9.11. Обратите внимание на то, что все 3 переменные х разные. Outer local х before loop: 8 Inner local x: 18 Inner local x: 18 Inner local x: 18 Inner local x: 18 Inner local x: 18 Inner local x: 18 Inner local x: 18 Inner local x: 18 Outer local x after loop: -1 Global x: 99
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |