Программирование на C шаг за шагом: шаг 7 – функции

 

C_logoФункции в C очень просты, однако из-за некоторых особенностей реализации – они немного ограничены.

  • функции могут иметь ограниченное или любое количество аргументов;
  • функции могут возвращать либо только одно значение, либо не возвращать ничего вообще.

В C аргументы передаются в функцию по значению, т.е. – мы не можем изменить значение аргумента вне функции. Для того, что бы реализовать такое изменение – мы можем использовать указатели (pointers), о которых мы поговорим позже.

Объявление функции выглядит так:

int foo(int bar) {
    /* do something */
    return bar * 2;
}

int main() {
    foo(1);
}

Функция foo() имеет один аргумент bar. Функция получает целое число, умножает его на два и возвращает результат.

Что бы вызвать функцию foo() с аргументом 1, мы используем такой синтаксис:

foo(1);

В C функции должны быть объявлены перед их использованием в коде. Они могут быть объявлены и реализованы позже с использованием заголовочных файлов (header files – файлы, с расширением .h), либо – они могут быть реализованы в порядке их использования.

Правильное использование функций выглядит так:

/* объявление функции */
int foo(int bar);

int main() {
    /* вызов функции foo из main */
    printf("The value of foo is %d", foo(1));
}

int foo(int bar) {
    return bar + 1;
}

Мы так же можем создать функцию, которая не возвращает никакого значения, используя ключевое слово void:

void moo() {
    /* выполняем что-то, что не возвращает значения */
}

int main() {
    moo();
}

Создадим функцию, которая вызывается в цикле for функции main(), получает один аргумент и, если переданное значение больше 10 – пишет сообщение:

#include <stdio.h>

/* function declaration */
int print_big(int number);

int main() {
  int array[] = { 1, 11, 2, 22, 3, 33 };
  int i;
  for (i = 0; i < 6; i++) {
    print_big(array[i]);
  }
  return 0;
}

int print_big(int number) {
  if (number > 10) {
    printf("%d is bigger then 10.n", number);
  }
}

Результат:

$ ./functions
11 is bigger then 10.
22 is bigger then 10.
33 is bigger then 10.