Функции в 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.