Определение функции может иметь одну из двух форм:
возвращаемый_тип имя_функции (список объявлений формальных параметров)
{
   объявления   /* тело функции */
   операторы
}
возвращаемый_тип имя_функции (список формальных параметорв)
объявление формальных параметров
{
   объявления     /* тело функции */
   операторы
}
Рекомендуется первая форма, соответствующая стандарту ANSI языка Си. Вторая форма использует стандарт K&R языка Си и обеспечивает совместимость с существующими программами на языке Си.
Тело функции – это составной оператор.
Именем функции является идентификатор. Подобно другим идентификаторам имя может содержать буквы, цифры, символ подчеркивания, но не может начинаться с цифры. Имя функции считается внешним идентификатором. Оно может использоваться внутри любой другой функции (или внутри определяемой функции). Количество значащих символов в имени зависит от системы. Рекомендуется использовать в именах строчные буквы.
В функцию может передаваться информация извне через аргументы, которые называются формальными параметрами. Кроме того, функция может возвращать значение в вызывающую ее функцию, которое называется возвращаемым значением. Тип возвращаемого значения определяет ключевое слово, стоящее перед именем функции в ее определении.
Важным различием между определением функции в стандарте ANSI (называемым также определением прототипа функции) и определением функции в стандарте K&R является то, что использование формы ANSI требует, чтобы при вызове функции ее аргументы были преобразованы к типу, ожидаемому функцией. Для того, чтобы эти соглашения выполнялись, вызову функции должно предшествовать определение прототипа функции или объявление прототипа функции. Если тип фактического параметра не может быть преобразован к требуемому типу аргумента, компилятор выдает сообщение об ошибке.
При использовании определения или объявления функции в форме K&R Си выполняются предполагаемые по умолчанию преобразования типа.
Пример 1
/*возвращает площадь круга, заданного радиусом*/
double area_circle(double radius)
  {
  return 3.14159*radius*radius;
  }