C++ для начинающих.

8.2.1. Объявления и определения.

Как было сказано в главе 7, объявление функции устанавливает ее имя, а также тип возвращаемого значения и список параметров. Определение функции, помимо этой информации, задает еще и тело – набор инструкций, заключенных в фигурные скобки. Функция должна быть объявлена перед вызовом. Например:

// объявление функции calc().

// определение находится в другом файле.

Void calc(int);

Int main().

{

Int loc1 = get(); // ошибка: get() не объявлена.

Calc(loc1); // правильно: calc() объявлена.

// ...

}

Определение объекта имеет две формы:

Type_specifier object_name;

Type_specifier object_name = initializer;

Вот, например, определение obj1. Здесь obj1 инициализируется значением 97:

Int obj1 = 97;

Следующая инструкция задает obj2, хотя начальное значение не задано:

Int obj2;

Объект, определенный в глобальной области видимости без явной инициализации, гарантированно получит нулевое значение. Таким образом, в следующих двух примерах и var1, и var2 будут равны нулю:

Int var1 = 0;

Int var2;

Глобальный объект можно определить в программе только один раз. Поскольку он должен быть объявлен в исходном файле перед использованием, то для программы, состоящей из нескольких файлов, необходима возможность объявить объект, не определяя его. Как это сделать?

С помощью ключевого слова extern, аналогичного объявлению функции: оно указывает, что объект определен в другом месте – в этом же исходном файле или в другом. Например:

Extern int i;

Эта инструкция “обещает”, что в программе имеется определение, подобное.

Int i;

Extern-объявление не выделяет места под объект. Оно может встретиться несколько раз в одном и том же исходном файле или в разных файлах одной программы. Однако обычно находится в общедоступном заголовочном файле, который включается в те модули, где необходимо использовать глобальный объект:

// заголовочный файл.

Extern int obj1;

Extern int obj2;

// исходный файл.

Int obj1 = 97;

Int obj2;

Объявление глобального объекта с указанием ключевого слова extern и с явной инициализацией считается определением. Под этот объект выделяется память, и другие определения не допускаются:

Extern const double pi = 3.1416; // определение.

Const double pi; // ошибка: повторное определение pi.

Ключевое слово extern может быть указано и при объявлении функции – для явного обозначения его подразумеваемого смысла: “определено в другом месте”. Например:

Extern void putValues( int*, int );