Программирование
Добавить в закладки К обложке
- 1. Системы программирования - Страница 1
- 2. Классификация языков программирования высокого уровня - Страница 2
- 3. Переменные Visual Basic - Страница 3
- 4. Типы переменных - Страница 4
- 5. Целочисленные, переменного типа и переменные данных - Страница 5
- 6. Объявление переменных: оператор Dim для различных типов данных - Страница 6
- 7. Изменение значений по умолчанию для типов, область видимости - Страница 7
- 8. Используемые символы языка СИ - Страница 8
- 9. Константы языка СИ - Страница 9
- 10. Примеры использования констант языка СИ - Страница 10
- 11. Идентификатор. Ключевые слова - Страница 11
- 12. Комментарии. Исходные файлы - Страница 12
- 13. Область видимости - Страница 13
- 14. Объявление переменной на внутреннем уровне с классом памяти static - Страница 14
- 15. Объявление переменной, которая служит именем внешнего массива - Страница 15
- 16. Методы доступа к элементам массивов - Страница 16
- 17. Директивы препроцессора - Страница 17
- 18. Применение директив - Страница 18
- 19. Рекурсия - Страница 19
- 20. Знакомство с языком СИ++ - Страница 20
- 21. Комментарии в СИ++ - Страница 21
- 22. Соотношение между основными типами данных в СИ++ - Страница 22
- 23. Операции языка СИ++ - Страница 23
- 24. Оператор выражение. Пустой оператор - Страница 24
- 25. Оператор switch, break. Копирование строки - Страница 25
- 26. Описание функций - Страница 26
- 27. Исходные файлы С++ - Страница 27
- 28. Описание - Страница 28
- 29. Описание и скрытие имен - Страница 29
- 30. Имена переменных - Страница 30
- 31. Разыменование - Страница 31
- 32. Ссылка - Страница 32
- 33. Выражения и операторы - Страница 33
- 34. Функции и файлы - Страница 34
- 35. Классы - Страница 35
- 36. Перегрузка операций - Страница 36
- 37. Производные классы - Страница 37
- 38. Потоки - Страница 38
- 39. Инспектор объектов для языка Дельфи - Страница 39
- 40. Окно редактора кода Дельфи - Страница 40
- 41. Сообщения Дельфи - Страница 41
- 42. Оптимизация по быстродействию в Ассемблер - Страница 42
- 43. Оптимизация по размеру в Ассемблер - Страница 43
- 44. Достоинства и недостатки оптимизации - Страница 44
- 45. Отказ от универсальности - Страница 45
- 46. Оптимизация переходов и вызовов подпрограмм - Страница 46
- 47. Оптимизация циклов - Страница 47
- 48. Управляющие таблицы - Страница 48
- 49. Оптимизация для конкретных моделей процессоров - Страница 49
- 50. Органы управления (controls) Active X - Страница 50
- 51. Синтаксис Active X - Страница 51
- 52. Практикум Active X - Страница 52
- 53. Сценарии и документы - Страница 53
- 54. Netscape Navigator - Страница 54
- 55. Понятие системы VВА - Страница 55
- 56. Язык программирования VВА - Страница 56
34. Функции и файлы
Все неэлементарные программы включают в себя несколько раздельно компилируемых единиц (их называют просто файлами). Покажем, как раздельно откомпилированные функции могут обращаться друг к другу.
Присутствие всей программы в одном файле обычно невозможно, так как коды стандартных библиотек и операционной системы располагаются где-то в другом месте. При этом хранить весь текст программы в одном файле обычно непрактично и неудобно. Так как единицей компиляции служит файл, то во всех случаях, когда в файле производятся изменения, весь файл необходимо компилировать заново. Даже для небольшой программы время, затрачиваемое на перекомпиляцию, можно заметно сократить с помощью разбиения программы на файлы подходящих размеров.
Покажем пример с калькулятором. Он был представлен одним исходным файлом. Если он набит, то наверняка были трудности с размещением описаний в правильном порядке и необходимо было бы применить по меньшей мере одно «фальшивое» описание, чтобы компилятор обрабатывал взаимно рекурсивные функции expr(), term() и prim(). Программа заключает в себе четыре части (лексический анализатор, программа синтаксического разбора, таблица имен и драйвер), но это никак не было отражено внутри программы. В общем, калькулятор был написан по-другому. Так это не делается; даже если в этой программе «на выброс» пренебречь всеми соображениями методологии программирования, эксплуатации и эффективности компиляции, следует разбить эту программу в 200 строк на несколько файлов, чтобы программировать было приятнее.
Программа, которая состоит из нескольких раздельно компилируемых файлов, должна быть согласованной в смысле применения имен и типов, так же, как и программа, которая состоит из одного исходного файла. Вообще это может обеспечить и компоновщик. Компоновщик представляет собой программу, которая стыкует отдельно скомпилированные части вместе. Компоновщик часто именуют загрузчиком. В иМХ'е компоновщик именуется Id. Но компоновщики, которые имеются в большинстве систем, обеспечивают очень слабую поддержку проверки согласованности.
Программист способен скомпенсировать недостаток поддержки со стороны компоновщика, предоставив дополнительную информацию о типах (описания). После этого согласованность программы осуществляется проверкой согласованности описаний, которые располагаются в отдельно компилируемых частях. Средства, которые это осуществляют, обеспечивают, в C++ разработаны так, чтобы способствовать такой явной компоновке.
Если оговорено иное, то имя, которое не является локальным для функции или класса, в любой части программы, компилируемой отдельно, должно относиться к определенному типу, значению, функции или объекту. То есть в программе может существовать только один нелокальный тип, значение, функция или объект с данным именем.