В предыдущей главе мы определили функцию как набор инструкций, которые выполняются последовательно. Хотя это, безусловно, правда, это определение не дает подробного понимания того, почему функции полезны. Давайте обновим наше определение: функция – это многократно используемая последовательность инструкций, предназначенная для выполнения определенной работы.
Вы уже знаете, что каждая программа должна иметь функцию с именем main (именно отсюда программа начинает свое выполнение при запуске). Однако по мере того, как программы становятся всё длиннее и длиннее, становится всё труднее управлять размещением всего кода внутри функции main . Функции позволяют разделить наши программы на небольшие модульные части, которые легче организовать, тестировать и использовать. Большинство программ используют множество функций. Стандартная библиотека C++ поставляется с множеством уже написанных функций, которые вы можете использовать, но также часто можно писать и свои собственные. Функции, которые вы пишете сами, называются пользовательскими функциями.
Изучение Си в одном видео уроке за час!
Рассмотрим случай, который может иметь место в реальной жизни: вы читаете книгу и вспоминаете, что вам нужно позвонить по телефону. Вы помещаете закладку в свою книгу, совершаете телефонный звонок, а когда заканчиваете телефонный звонок, вы возвращаетесь в место, которое отметили закладкой, и продолжаете читать книгу с того места, где остановились.
Программы на C++ могут работать точно так же. Программа будет последовательно выполнять инструкции внутри одной функции, пока не обнаружит вызов другой функции. Вызов функции – это выражение, которое говорит CPU прервать текущую функцию и выполнить другую функцию. CPU «помещает закладку» в текущую точку выполнения, а затем вызывает (выполняет) функцию, указанную в вызове функции. Когда вызываемая функция завершается, CPU возвращается в точку, отмеченную закладкой, и возобновляет выполнение.
Функция, инициирующая вызов функции, называется вызывающей функцией или caller, а вызываемая функция – callee.
Пример пользовательской функции
Во-первых, давайте начнем с самого базового синтаксиса для определения пользовательской функции. В этом уроке все пользовательские функции (кроме main ) будут иметь следующий вид:
тип_возвращаемого_значения идентификатор() // идентификатор заменяется именем вашей функции < // ваш код здесь >
4. Структура программы
Программа, записанная на языке C++, должна иметь заголовок и тело программы, состоящее из одной или нескольких функций. В качестве примера рассмотрим структуру программы (табл. 16), реализующую алгоритм определения суммы или произведения элементов матрицы в зависимости от значения первого элемента. Алгоритм был разработан в п. 2.4.4 и приведен на рис. 23.
Каждая программа на языке C++ начинается с оператора #include, например (см. табл. 16):
Оператор #include сообщает компилятору, какие заголовочные файлы (файлы с расширением h) нужно включить в программу. Заголовочные файлы — это файлы, которые содержат определения, предоставляемые компилятором для выполнения различных операций (например, операций ввода-вывода, математических операций и т.д.). Заголовочные файлы записаны в формате ASCII, их содержимое можно вывести для просмотра на экран или на принтер из каталога INCLUDE.
Язык C++ с нуля | #14 Функции в c++.
Тело программы состоит из одной или нескольких функций. Каждая программа на C++ содержит главную функцию, с которой начинается выполнение программы. Главная функция начинается с оператора
После оператора начала главной функции следуют операторы программы, заключенные в группирующие фигурные скобки <>.
//позволяет перевести из фунтов в метры и сантиметры
float feet, meters, centimeters;
centimeters = feet * 12 * 2.54;
Файл IOMANIP.H, подключаемый в начале программы, содержит объявления трех функций, являющихся членами класса ios (базовый в иерархии классов ввода/вывода): setw(), setprecision () и setiosflags(). Функция setw() задает минимальную ширину (в символах) выводимого поля. Функция setprecision () задает число цифр после десятичной точки при выводе чисел с плавающей запятой. Функция setw () вынуждена повторяться три раза, нескольку определяет формат вывода только следующей за ней переменной, после чего все сделанные установки сбрасываются. В отличие от нее функция setios — f lags () вызывается один раз, устанавливая флаг fixed, который задает вывод чисел с плавающей запятой в фиксированном формате, т.е. без экспоненты.
5. Операторы языка C++
Операторы в языке C++ предназначены для описания действий. Любой оператор может быть помечен меткой. Операторы отделяются друг от друга точкой с запятой.
К простым операторам языка C++ относятся оператор присваивания, операторы ввода и вывода данных, оператор перехода.
Оператор присваивания
Оператор присваивания является основным, фундаментальным оператором. Общий вид оператора: имя_переменной=выражение;
Выражение состоит из операндов и операций. Операндом может быть константа, переменная или функция. Операции объединяют операнды и выражения. Перечень операций языка C++ приведен в приложении 7. Вид выражения однозначно определяет правила его вычисления: действия выполняются слева направо с соблюдением старшинства, указанного в таблице приоритетов (табл. 17).
Наиболее часто используемые в программах математические функции языка C++ находятся в библиотеке math.h, расположенной в каталоге INCLUDE. Если вы хотите воспользоваться этими функциями, то в начало программы необходимо включить заголовочный файл: #include
Начальное значение переменной в языке C++ можно присвоить при ее объявлении, например, int х=16, у=32;
В отличие от других языков программирования в C++ оператор присваивания может использоваться в выражениях, которые включают в себя операторы сравнения или логические операторы, например: if ((x=x+5)>0) cout«»Bывод»;
В этом примере сначала происходит увеличение переменной на 5, а затем ее значение сравнивается с нулем.
Для того чтобы присвоить одинаковое значение, например 2*k, нескольким переменным, можно воспользоваться оператором присваивания: x=y=z=2*k;
В языке C++ есть дополнительные операции присваивания: +=, — = , *=, /=, %=. Например, вместо оператора х=х+5; можно записать: х+=5;
Часто в C++ используются префиксные (до) и постфиксные (после) операции увеличения и уменьшения значений переменных на единицу.
Префиксные операции увеличивают (уменьшают) значение переменной на единицу, а затем используют это значение, например: х=++у;
В этом примере сначала происходит увеличение на единицу значения переменной у, а затем присваивание этого значения переменной х.
Постфиксные операции сначала используют значение переменной, после чего увеличивают (уменьшают) его, например: х=у- -; В этом примере переменная х получает значение у, после чего у уменьшается на единицу.
Дополнительные операторы присваивания: +=, -=, *=, /=, %=
В языке С++ имеется несколько операторов присваивания. Важнейшим из них, несомненно, является оператор =, который просто присваивает значение выражения, стоящего справа от знака, переменной, стоящей слева от знака операции. Другие операторы присваивания обновляют или корректируют значения переменных. В записи каждого такого оператора имя переменной стоит слева от знака, а выражение — справа. Переменной присваивается новое значение, равное ее старому значению, скорректированному на величину выражения, стоящего справа. Результат зависит от используемой оператора, например:
В представленном выше перечне мы воспользовались простыми числами, но мы вполне могли использовать более сложные выражения: х *= 3 * у 4- 12 то же самое, что и х = х*(3*у + 12)
Операторы присваивания, которые мы только что обсудили, обладают таким же низким приоритетом, что и оператор =, т.е. меньший, чем приоритет + или *. Это обстоятельство наглядно проявляется в последнем примере, когда 12 прибавляется к 3 * у, а после этого результат умножается на х.
Операции приращения и уменьшения.
Есть две разновидности префиксная форма ++а и постфиксная форма а++.
/* postjpre.c — постфиксная и префиксная формы */
int main(void)
int aplus, plusb;
aplus = a++; /* постфиксная форма */
plusb = ++b; /* префиксная форма */
return (0);
Если ваш компилятор работает корректно, получается следующий результат:
a aplus b plusb
Как и предполагалось, значение обеих переменных а и b увеличилось на 1. Однако переменной aplus значение было присвоено перед изменением величины а, в то же время переменная plusb получила значение b уже после того, как была изменена величина b. В этом и заключается различие между постфиксной и префиксной формами (рис. 5.5).
aplus = а++; /* постфиксная форма: а подвергается изменению после того, как ее значение использовано */
plusb = ++b; /* префиксная форма: b подвергается изменению перед тем, как ее значение использовано */
В тех случаях, когда одна из этих операций используется сама по себе, как, например, в одиночном операторе ego++, не имеет значения, какой формой этой операции вы пользуетесь. Однако выбор имеет смысл, когда сама операция и ее операнды являются частью выражения, подобного приведенным выше оператор присваивания. В подобного рода ситуациях желать более четкое представление о результате, который вы хотели бы получить. Например, вспомните, с какой цельлью вы использовали следующей оператор:
Каждой форме операции приращения соответствует операции уменьшения (декремента), при этом вместо ++,
— — count; /* префиксная форма операции уменьшения
count — -; /* постфиксная форма операции уменьшения
Источник: studfile.net
Функция main и выполнение программ
Каждая программа C имеет основную функцию, которая должна иметь имя main . Функция main служит отправной точкой для выполнения программы. Она обычно управляет выполнением программы, вызывая другие ее функции.
К функции применяется несколько ограничений main , которые не применяются к другим функциям C. Функция main :
- Не может быть объявлен как inline .
- Не может быть объявлен как static .
- Не может быть принято его адрес.
- Не удается вызвать из программы.
Сигнатура main функции
Функция main не имеет объявления, так как она встроена в язык. Если это так, синтаксис объявления для main будет выглядеть следующим образом:
int main( void ); int main( int argc, char *argv[ ] ); int main( int argc, char *argv[ ], char *envp[ ] );
Функция main объявляется неявно с помощью одной из этих сигнатур. При определении main функции можно использовать любую из этих сигнатур. Компилятор Майкрософт также позволяет main иметь тип возвращаемого void значения, если значение не возвращается. Параметры argv и envp можно wmain также определить как тип char** . Дополнительные сведения о аргументах см. в разделе Описание аргумента.
Примечания
Функции в исходном коде программы выполняют одну или несколько конкретных задач. Функция main может вызывать эти функции для выполнения соответствующих задач. При main вызове другой функции она передает управление выполнением функции, поэтому выполнение начинается с первого оператора в функции. Функция возвращает управление при main выполнении return инструкции или достижении конца функции.
Можно объявить любую функцию, включая main , для получения параметров. Термин «параметр» или «формальный параметр» относится к идентификатору, получающему значение, передаваемое функции. Сведения о передаче аргументов в качестве параметров вы найдете в статье Параметры.
Когда одна функция вызывает другую, вызываемая функция получает значения своих параметров от вызывающей функции. Эти значения называются аргументами. Можно объявить формальные параметры в , main чтобы получать аргументы из командной строки в формате, показанном в сигнатуре функции.
Если вы хотите передать сведения в функцию main , параметры обычно называются argc и argv , хотя компилятор C не требует этих имен. Как правило, если третий параметр передается в main , этот параметр называется envp . Типы для argc , argv и envp определяются языком C. Можно также объявить argv как char** argv и envp как char** envp . В приведенных ниже в данном разделе примерах описывается использование этих трех параметров для доступа к аргументам командной строки. Эти параметры объясняются в следующих разделах.
Если ваш код соответствует модели программирования в Юникоде, в качестве точки входа в программу можно использовать версию расширенных символов main wmain майкрософт , . Дополнительные сведения об этой версии с расширенными символами main см. в разделе Использование wmain .
main Прекращения
Программа обычно прекращает выполнение, когда она возвращается из или достигает конца main , хотя она может завершиться в других точках программы по различным причинам. Например, может потребоваться принудительное завершение программы при обнаружении некоторого состояния ошибки. Для этого можно использовать функцию exit . Дополнительные сведения и exit пример использования см. в разделе exit .
Источник: learn.microsoft.com