- •Объявление переменных в итерационных инструкциях и инструкциях выбора
- •Формальные параметры
- •Глобальные переменные
- •Функции
- •Вызов функций с массивами
- •Передача функциям строк
- •Аргументы функции main(): argc и argv
- •Передача числовых аргументов командной строки
- •Преобразование числовых строк в числа
- •Возврат значений
- •Функции, которые не возвращают значений (void-функции)
- •Функции, которые возвращают указатели
- •Прототипы функций
- •Подробнее о заголовках
- •Рекурсия
Передача числовых аргументов командной строки
Как упоминалось выше, при передаче программе числовых данных в качестве аргументов командной строки эти данные принимаются в строковой форме. В программе должно быть предусмотрено их преобразование в соответствующий внутренний формат с помощью одной из стандартных библиотечных функций, поддерживаемых C++. Например, при выполнении следующей программы выводится сумма двух чисел, которые указываются в командной строке после имени программы. Для преобразования аргументов командной строки во внутреннее представление здесь используется стандартная библиотечная функция atof(). Она преобразует число из строкового формата в значение типа double.
/* Эта программа отображает сумму двух числовых аргументов командной строки.
*/
#include <iostream>
#include <cstdlib>
using namespace std
int main(int argc, char *argv[])
{
double a, b;
if(argc!=3) {
cout << "Использование: add число число\n";
return 1;
}
a = atof(argv[1]);
b = atof(argv[2]);
cout << a + b;
return 0;
}
Чтобы сложить два числа, используйте командную строку такого вида (предполагая, что эта программа имеет имя add).
C>add 100.2 231
Преобразование числовых строк в числа
Стандартная библиотека C++ включает несколько функций, которые позволяют преобразовать строковое представление числа в его внутренний формат. Для этого используются такие функции, как atoi(), atol() и atof(). Они преобразуют строку в целочисленное значение (типа int), длинное целое (типа long) и значение с плавающей точкой (типа double) соответственно. Использование этих функций (для их вызова необходимо включить в программу заголовочный файл <cstdlib>) демонстрируется в следующей программе.
// Демонстрация использования функций atoi(), atol() и atof().
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int i;
long j;
double k;
i = atoi ("100");
j = atol("100000");
k = atof("-0.123");
cout << i << ' ' << j << ' ' << k;
cout << ' \n';
return 0;
}
Результаты выполнения этой программы таковы.
100 100000 -0.123
Функции преобразования строк полезны не только при передаче числовых данных программе через аргументы командной строки, но и в ряде других ситуаций.
Инструкция return
До сих пор (начиная с главы 2) мы использовали инструкцию return без подробных разъяснений. Напомним, что инструкция return выполняет две важные операции. Во-первых, она обеспечивает немедленное возвращение управления к инициатору вызова функции. Во-вторых, ее можно использовать для передачи значения, возвращаемого функцией. Именно этим двум операциям и посвящен данный раздел.
Завершение функции
Как вы уже знаете, управление от функции передается инициатору ее вызова в двух ситуациях: либо при обнаружении закрывающейся фигурной скобки, либо при выполнении инструкции return. Инструкцию return можно использовать с некоторым заданным значением либо без него. Но если в объявлении функции указан тип возвращаемого значения (т.е. не тип void), то функция должна возвращать значение этого типа. Только void-функции могут использовать инструкцию return без какого бы то ни было значения.
Для void-функций инструкция return главным образом используется как элемент программного управления. Например, в приведенной ниже функции выводится результат возведения числа в положительную целочисленную степень. Если же показатель степени окажется отрицательным, инструкция return обеспечит выход из функции, прежде чем будет сделана попытка вычислить такое выражение. В этом случае инструкция return действует как управляющий элемент, предотвращающий нежелательное выполнение определенной части функции.
void power(int base, int exp)
{
int i;
if(exp<0) return; /* Чтобы не допустить возведения числа в отрицательную степень, здесь выполняется возврат в вызывающую функцию и игнорируется остальная часть функции. */
i = 1;
for( ; exp; exp--) i = base * i;
cout << "Результат равен: " << i;
}
Функция может содержать несколько инструкций return. Функция будет завершена при выполнении хотя бы одного из них. Например, следующий фрагмент кода совершенно правомерен.
void f()
{
// ...
switch(с) {
case 'a': return;
case 'b': // ...
case 'c': return;
}
if(count<100) return;
// ...
}
Однако следует иметь в виду, что слишком большое количество инструкций return может ухудшить ясность алгоритма и ввести в заблуждение тех, кто будет в нем разбираться. Несколько инструкций return стоит использовать только в том случае, если они способствуют ясности функции.
