|
Программирование >> Структурное программирование
Рис. 3.17. Список примеров и упражнений по рекурсии в тексте книги Совет по повышению эффективности 3.6 Программа, разбитая на множество функций, потенциально требует большего количества вызовов функций по сравнению с монолитной программой без функций. Это увеличивает время выполнения и затраты памяти компьютера. Но монолитные программы трудно программировать, тестировать, отлаживать, сопровождать и развивать. Так что функционализируйте ваши программы с учетом здравого смысла, всегда учитывая хрупкий баланс между производительностью и хорошей техникой программирования. 3.15. Функции с пустыми списками параметров в С++ пустой список параметров определяют, либо записывая void, либо совсем ничего не записывая в круглых скобках. Объявление void print (); указывает, что функция print не требует никаких аргументов и не возвращает значений. Рис. 3.18 демонстрирует оба используемых в С++ способа объявления и применения функций, не требующих аргументов. f 1 () ; f 2 () ; return 0; void fl0 { cout функция fl не требует аргументов endl; void f2(void) { cout << функция f2 также не требует аргументов << endl; Функция fl не требует аргументов Функция f2 также не требует аргументов Рис. 3.18. Два способа объявления и использования функций, не требующих аргументов Замечание по мобильности 3.3 Роль пустого списка параметров функции в С++ существенно отличается от С. В С это означает, что все проверки аргументов отсутствуют (т.е. вызов функции может передать любой аргумент, который требуется). А в С++ пустой список означает отсутствие аргументов. Таким образом, программа на С, использующая эту особенность, может сообщить о синтаксической ошибке при компиляции в С++. Теперь, когда мы обсуждаем, что можно опустить при записи программы, необходимо отметить, что функция, определенная в файле до любого обращения к ней, не требует отдельного прототипа функции. В этом случае в качестве прототипа выступает заголовок функции. Типичная ошибка программирования 3.21 Программы на С++ не компилируются, еспи для каждой функции нет соответствующего ей прототипа или каждая функция не определяется до того, как она используется. 3.16. Встраиваемые функции Реализация программы как набора функций хороша с точки зрения разработки программного обеспечения, но вызовы функций, как говорилось, приводят к накладным расходам во время выполнения. В С++ для снижения iJf II Функции, не требующие аргументов #include <iostream.h> ; /;j void fl() ; I void f 2 (void) ; ; mainO inline float cube(const float s) { return s * s * s; } main() { cout << Введите длину стороны вашего куба: ; float side; cin >> side; cout << Объем куба со стороной << side << равен << cube (side) << endl; return 0; Ввелите длину стороны вашего куба: 3.5 Объем куба со стороной 3.5 равен 42.875 Рис. 3.19. Использование функции inline для расчета объема куба этих накладных расходов на вызовы функций - особенно небольших функций - предусмотрены встраиваемые (inline) функции. Спецификация inline перед указанием типа результата в объявлении функции советует компилятору сгенерировать копию кода функции в соответствующем месте, чтобы избежать вызова этой функции. В результате получается множество копий кода функции, вставленных в программу, вместо единственной копии, которой передается управление при каждом вызове функции. Компилятор может игнорировать спецификацию inline и обычно так и делает для всех функций, кроме самых малых. Замечание по технике программирования 3.15 Любые изменения функции inline могут потребовать перекомпиляции всех потребителей этой функции. Это может оказаться существенным моментом для развития и поддержки некоторых программ. Хороший стиль программирования 3.13 Спецификацию inline целесообразно применять только для небольших и часто используемых функций. Совет по повышению эффективности 3.7 Использование функций inline может уменьшить время выполнения программы, но может увеличить ее размер. Программа на рис. 3.19 использует встроенную функцию cube для расчета величины куба со стороной s. Ключевое слово const в списке параметров функции cube говорит компилятору о том, что функция не изменяет параметр S. Ключевое слово const подробно обсуждается в главах 4, 5 и 7. Использование встраиваемой функции для расчета объема куба iclude <iostream.h>
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |