Программирование. Принципы и практика использования C++ Исправленное издание, стр. 112
}}Вложенные блоки неизбежны, но они свидетельствуют о завышенной сложности программы и уязвимы для ошибок.
В языке C++ существует еще одно средство —
namespace
// опасно уродливый кодstruct X {void f(int x) {struct Y {int f() { return 1; } int m; };int m;m=x; Y m2;return f(m2.f()); }int m; void g(int m) {if (m) f(m+2); else {g(m+2); }}X() { } void m3() {}void main() {X a; a.f(2);}};Неудобочитаемый код обычно скрывает ошибки. Если вы используете интегрированные среды разработки программ, то они автоматически выравнивают фигурные скобки (в соответствии со своими установками). Кроме того, существуют “программы изящного форматирования”, которые переформатируют исходный код в файле (часто предлагая пользователю выбор). Однако окончательная ответственность за удобочитаемость кода лежит на его авторе.
8.5. Вызов функции и возврат значения
+*forifДля выполнения своего предназначения функции принимают аргументы и, как правило, возвращают результат. В этом разделе мы рассмотрим механизмы передачи аргументов.
8.5.1. Объявление аргументов и тип возвращаемого значения
Функции в языке С++ используются для названия и представления вычислений и действий. Объявление функции состоит из типа возвращаемого значения, за которым следует имя функции и список формальных аргументов. Рассмотрим пример.
double fct(int a, double d); // объявление функции fct (без тела)double fct(int a, double d) { return a*d; } // объявление функции fctОпределение состоит из тела функции (инструкций, выполняемых при ее вызове), в то время как объявление, не являющееся определением, просто завершается точкой с запятой. Формальные аргументы часто называют параметрами (parameters). Если не хотите, чтобы функция имела аргументы, не указывайте параметры. Например:
int current_power(); // функция current_power не имеет аргументовЕсли хотите, чтобы функция не возвращала никаких значений, укажите вместо типа возвращаемого значения ключевое слово
voidvoid increase_power(int level); // функция increase_power // ничего не возвращаетЗдесь ключевое слово
void// поиск строки s в векторе vs;// vs[hint] может быть подходящим местом для начала поиска// возвращает индекс найденного совпадения; –1 означает "не найдена"int my_find(vector<string> vs, string s, int hint); // именованные // аргументыint my_find(vector<string>, string, int); // неименованные аргументы
my_find()Как правило, все аргументы в объявлении имеют имена. Рассмотрим пример.
int my_find(vector<string> vs, string s, int hint)// поиск строки s в векторе vs, начиная с позиции hint{ if (hint<0 || vs.size()<=hint) hint = 0; for (int i = hint; i<vs.size(); ++i) // поиск, начиная // с позиции hint if (vs[i]==s) return i; if (0<hint) { // если строка s не была найдена на позиции до hint for (int i = 0; i<hint; ++i) if (vs[i]==s) return i; } return –1;}Переменная
hintmy_find()hinthintmy_find()hintmy_find()