Определение функций
В этом уроке вы научитесь писать собственные функции. Начнём с задачи. Игра каждый раз выводитодно и то же сообщение, когда вы проходите уровень. Программа в редакторе делает это для двух уровней:
#include <stdio.h>
int main(void) {
printf("Уровень 1 пройден\n");
printf("==========\n");
printf("Отлично!\n");
printf("==========\n");
printf("Уровень 2 пройден\n");
printf("==========\n");
printf("Отлично!\n");
printf("==========\n");
return 0;
}Это работает, но одни и те же три строки написаны дважды. В настоящей игре сто уровней. Представьте,что вам пришлось бы писать эти строки сто раз! А если захотеть изменить сообщение, его пришлось бы менятьв ста местах, и вы наверняка пропустили бы одно.
Программисты стараются не повторять код. Они пишут повторяющуюся часть один раз, дают ей имя и потомиспользуют везде, где нужно. Такой именованный кусок кода называется функцией. Хорошее имяещё и подсказывает, что делает код, поэтому программу легче читать.
На самом деле одну функцию вы пишете с первого урока: main. Строкаint main(void) { начинает определение функции с именем main, а инструкциимежду фигурными скобками — её тело. Когда вы запускаете программу, она начинает с выполнения main.Свою функцию вы определяете похожим образом:
void greet(void) {
printf("Привет!\n");
printf("Хорошего дня!\n");
}В определении функции есть такие части:
void(по-английски «пустой») — это тип возвращаемого значения. Он говорит, чтофункция не возвращает значение. Она только что-то делает: здесь выводит две строки. Позже в этом урокевы напишете функции, которые возвращают значение.- Имя функции, здесь
greet. Правила те же, что и для имён переменных: буквы, цифры и_, без пробелов, регистр букв важен. Имена из нескольких слов пишут в стиле snake_case, напримерprint_banner. Выбирайте имя, которое говорит, что делает функция. - Круглые скобки с
voidвнутри. Здесьvoidозначает, что функция ничего непринимает. Скоро вы узнаете, что ещё может стоять в скобках. - Тело функции в фигурных скобках
{ }с отступом в 4 пробела, как у телаmain. В нём находятся инструкции, которые выполняет функция.
Пишите функцию выше main, а не внутри неё. В C функцию нельзя определить внутри другой функции.Если написать её в теле main, программа не скомпилируется, и компилятор сообщитerror: function definition is not allowed here.
Если запустить программу с новой функцией, она по-прежнему выводит только то, что выводит main.Это не ошибка! Определение лишь говорит, что должна делать функция, как рецепт, записанный в кулинарной книге:пока никто ничего не приготовил. В следующем упражнении вы заставите функцию выполниться.
Задание
- 1
Выше
main, на месте комментария, определите функциюvoid print_banner(void).Её тело выводит три строки сообщения:==========,Отлично!и==========.Затем запустите программу: она по-прежнему выводит то же, что и раньше, потому что функцию пока никто невызвал. Так и должно быть.