Определение и объявление переменной являются двумя различными, но связанными операциями.
Если вы задаете функцию, это означает, что тело функции записано: int f(void) { return 0; }
Если вы задаете переменную, это означает, что часть памяти зарезервирована для переменной: int x; or extern int x=0;
Когда переменная не определена, программное обеспечение рассматривает переменную как инициализированную и потенциально имеющую любое значение в полной области значений.
Когда функция не задана, программа заглушает функцию.
Объявление функции: int f(void);
Переменное объявление: extern int x;
Объявление предоставляет информацию о типе функции или переменной. Если вы используете функцию или переменную в файле, где она не была объявлена, возникает ошибка компиляции.