Оператор объявления функции (объявление прототипа функции) имеет следующий вид:
возвращаемый_тип имя_функции (список объявлений типов параметров);
В стандарте ANSI языка Си типы возвращаемого значения функции и типы каждого из аргументов указываются в определении функции.
Пример 1
double area_circle(double rad)   /* это определение функции*/
{
...
}
Любая вызывающая функция должна быть проинформирована о типе возвращаемого значения и о типах каждого из аргументов путем использования оператора объявления функции (объявление прототипа функции). Если объявление прототипа функции задано, то компилятор проверяет правильность использования функции. В противном случае подобные ошибки дадут о себе знать только при выполнении программы. Если определение функции предшествует вызову, то объявление прототипа функции не требуется.
Объявление может быть сделано перед вызывающей функцией или внутри ее.
Пример 2
int main()
{
double area_circle(double); /* это объявление функции*/
...
area=area_circle(rad);
...
}
Объявление функции area_circle() известно только той функции, в которой оно сделано, то есть функции main().
Пример 3
double area_circle(double); /* и это объявление функции*/
int main ()
{
...
area=area_circle(rad);
...
}
Объявление известно всем функциям, расположенным в исходном файле после него. Если при определении функции она будет объявлена с другим типом возвращаемого значения (например, float), будет выдано сообщение об ошибке, состоящей в повторном объявлении функции.
В объявлении прототипа функции могут указываться необязательные (фиктивные) имена.
Для функций, не возвращающих никакого значения, используется тип данных (ключевое слово) void. Тогда при неумышленном использовании оператора:
X = f();
во время компиляции будет выдано сообщение, указывающее на ошибку в операции присваивания (правая часть операции присваивания имеет тип void).
Пример 4
#include <stdio.h>
int main( )
{
  double area_circle(double);   /* это объявление функции*/
  double rad = 50.5, area;

  area=area_circle(rad);
  printf("Area is %f\n",area);
}
/*возвращает площадь круга, заданного радиусом*/
double area_circle(double radius)   /* это определение функции*/
  {
  return 3.14159*radius*radius;
  }