Разница между определением и декларацией
Объявление переменной предназначено для того, чтобы сообщить компилятору следующую информацию: имя переменной, тип значения, которое она содержит, и начальное значение, если оно принимает. т.е. объявление дает подробную информацию о свойствах переменной. Принимая во внимание, что определение переменной говорит, где хранится переменная. т.е. память для переменной выделяется во время определения переменной.
В языке C определение и объявление переменной происходит одновременно. т.е. нет разницы между декларацией и определением. Например, рассмотрим следующее объявление
int a;
Здесь информация, такая как имя переменной: a и тип данных: int, отправляется компилятору и сохраняется в структуре данных, известной как таблица символов. Наряду с этим будет выделена память размером 2 байта (в зависимости от типа компилятора).
Предположим, если мы хотим только объявлять переменные, а не определять их, т.е. мы не хотим выделять память, то можно использовать следующее объявление
extern int a;
В этом примере отправляется только информация о переменной, а выделение памяти не производится. Приведенная выше информация сообщает компилятору, что переменная a объявлена сейчас, а память для нее будет определена позже в том же файле или в другом файле.
Объявление функции предоставляет компилятору имя функции, количество и тип аргументов, которые она принимает, а также тип возвращаемого значения. Например, рассмотрим следующий код,
интервал добавления (интервал, интервал);
Здесь объявлена функция с именем add с двумя аргументами типа int и возвращаемого типа int. Память на этом этапе не выделяется.
Определение функции используется для выделения памяти для функции. Например, рассмотрим следующее определение функции,
int добавить (int a, int b) { возврат (а + б); }
Во время этого определения функции будет выделена память для добавления функции. Переменная или функция могут быть объявлены любое количество раз, но могут быть определены только один раз.
Вышеуказанные моменты резюмированы в следующей таблице.
Декларация | Определение |
---|---|
Переменная или функция могут быть объявлены любое количество раз. | Переменная или функция могут быть определены только один раз |
При объявлении память не выделяется | Память будет выделена |
int f (интервал); Вышеупомянутое объявление функции. Это объявление предназначено только для информирования компилятора о том, что функция с именем f с типом возвращаемого значения и аргументом int будет использоваться в функции. | int f (int a) { вернуть; } Система выделяет память, просматривая приведенное выше определение функции. |