Другие управляющие средства языка Си

 

Помимо операторов ветвления и цикла, выполняющих передачу управления в зависимости от того ли иного условия, С++ имеет группу операторов для безусловной передачи управления. Это операторы break, continue, goto и return.

break может содержаться внутри тела цикла любой вложенности. При его исполнении управление передается в тело охватывающего цикла или для самого внешнего цикла - на оператор, следующий после цикла. Поэтому для прекращения всего цикла по "инициативе" наиболее глубоко вложенного цикла приходится выполнять не один, а несколько операторов break.

Аварийный выход из вложенного цикла - оправданное применение оператора goto label. Он передает управление на оператор, помеченный меткой label. Другая редко возникающая необходимость использования оператора goto - включение в кодовый сегмент программы специальных областей данных. Как правило, это связано с использованием кода на ассемблере. Например:

goto mmm;

asm db 4 dup(0)

mmm: а-345;

Оператор continue может использоваться только внутри тела цикла. В результате его исполнения управление переносится: 1) для оператора for на секцию increment_expr; 2) для операторов do ... while и whiIe на вычисление выражения cond_ехрг и определение необходимости завершения цикла.

Оператор return переносит управление из текущей функции в точку ее вызова.

 

6. Функции в языке С++

 

Описание функции

 

Функция – логически самостоятельная именованная часть программы, которой могут передаваться параметры, и которая может возвращать кокое-то значение. Функции – это основные конструкции для построения пользовательских программ, концептуально расширяющие язык С++.

Большинство языков программирования используют функции и процедуры. С++ не поддерживает формальных процедур. Все подпрограммы языка С++ являются функциями.

Программа на языке С++ состоит из одной или нескольких функций. Формат определения функции:

[тип_данных] имя_функции( список_аргументов | void)

{

описание данных

операторы

[return (выражение)]

}

Совокупность предложений в фигурных скобках часто называют телом функции. Встретив определение функции, компилятор создает самостоятельную секцию кода программы, которая на этапе компоновки объединяется с другими функциями. Синтаксис языка С++ запрещает внутри определения функций помещать определение еще одной функции.

Поле «тип_данных» задает тип возвращаемого функцией значения. Если оно отсутствует, считается, что функция возвращает значение типа int. Если поле «тип_данных» содержит ключевое слово void, функция не возвращает никакого значения. Так как на организацию возврата тратится несколько машинных команд, использование void при описании возвращаемого значения позволяет получать более короткий и производительный код программы. Естественно, это возможно тогда, когда функция действительно не должна возвращать значений или для возврата значений используются указатели либо внешние переменные.

Поле «имя_функции» – это особый тип указателя, называемого указатель на функцию. Его значением является адрес точки входа в функцию. Для каждой ссылки на функцию (точка вызова функции) компилятор подставляет машинную инструкцию вызова процедуры с возвратом. В результате управление передается в точку входа функции, выполняются операторы, составляющие тело функции. Любая функция содержит машинную инструкцию возврата RET. Выполнение инструкции RET возвращает управление в точку вызова.

Поле «список_аргументов» определяет аргументы (или параметры), передаваемые в функцию, и содержит любую комбинацию типов и имен. Если функция имеет несколько аргументов, их тип и имена разделяются запятой. Это поле в определении функции называют списком формальных аргументов (или параметров). Для каждого вызова функции с параметрами компилятор добавляет в точке вызова машинные инструкции записи копий формальных аргументов в стек. Копии аргументов в стеке называют фактическими аргументами (или параметрами). Значения фактических аргументов последовательно ставятся в соответствие формальным аргументам.

Поле «список_аргументов» – не обязательная часть в определении функции. Если в функцию не передаются никакие аргументы, это поле – пустое или содержит ключевое слово void.

Правила, которых нужно придерживаться при объявлении функций языка С++:

1) Тип результата функции С++ записывается до имени функции.

2) Если список параметров не пустой, используются круглые скобки. Язык С++ разрешает также использовать ключевое слово void для обозначения отсутствия параметров.

3) Список_типов_параметров содержит список типов параметров следующего формата:

[const] тип1 параметр1 [const] тип2 параметр2…

Этот формат показывает, что отдельный параметр объявляется как переменная: сначала сообщается тип, а затем индефикатор параметра. Параметры списка в языке С++ разделяются запятой. Нельзя группировать последовательность параметров с одинаковым типом данных. Каждый параметр должен быть объявлен в отдельности. Если параметр имеет ключевое слово const, то компилятор проверяет, действительно ли функция не изменяет аргументы параметра.

4) Тело функции в языке С++ заключается в фигурные скобки {}. После функции точка с запятой не ставится.

5) С++ поддерживает передачу аргументов либо по значению, либо по ссылке, либо с использованием указателей. По умолчанию параметры передают свои аргументы в виде значения. Следовательно, функции работают с копией данных, сохраняя исходные данные. Для объявления параметра-ссылки ставится символ & после типа данных этого параметра. Параметр-ссылка становится альтернативным именем своего аргумента, и любые его изменения влияют на аргумент. Параметр- ссылка записывается в виде:

[const] тип1& параметр1 [const] тип2 & параметр2…

6) С++ поддерживает локальные константы, типы данных и переменные. Эти элементы данных могут появляться во вложенных операторах, вложенные функции в языке С++ не поддерживаются.

7) Ключевое слово return возвращает значение функции.

8) Если тип результата – void, не обязательно использование ключевого слова return, если не требуется обеспечить выход в теле функции.

 

Прототипы функций

 

С++ предписывает либо описание, либо определение функции перед ее использованием. Описание функции, называемое прототипом, сообщает имя функции, тип результата, число и тип ее параметров. Включение имени параметра является необязательным. Необходимо ставить точку с запятой после закрывающей круглой скобки. Язык С++ требует объявления функции, если вы вызываете ее до определения. Ниже приведен простой пример прототипа:

//прототип функции square

double sqr ( double );

main ( )

{

cout << "5^2" <<sqr ( 5 ) << endl:

return 0;

}

//определение функции square

double sqr ( double z )

{

return z*z ;

}

Обычно объявление функции делается глобальным. Однако можно объявлять прототип функции внутри функции пользователя. Этот способ делает прототип недоступным для других функций.

Вызов функции требует, чтобы ее параметры были обеспечены аргументами. Аргументы записываются на место параметров в том порядке, в каком параметры объявлены. Аргументы должны иметь тип данных, который совпадает или совместим с типом данных параметров. Например, вы можете иметь функцию volume , определенную следующим образом:

double volume ( double length, double width, double heigth)

{

return length*width*heigth;

}

Для вызова функции volume необходимо,чтобы аргументы имели тип double или совместимый тип данных. Ниже приведено несколько примеров вызова функции volume:

double len=34, width=55,ht=100;

int i=3;

long j=44;

unsigned k=33;

cout<<volume(len,width,ht)<<endl<<<<volume(1,2,3)<<endl;

cout<<volume(len,j,22.3)<<endl;

C++ позволяет отбрасывать результат функции. Этот вид вызова функции используется тогда, когда внимание должно быть сосредоточено на действиях функции, а не на возвращаемом значении.

 








Дата добавления: 2017-01-29; просмотров: 954;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.012 сек.