Программирование. Принципы и практика использования C++ Исправленное издание
Шрифт:
Заметьте, что, когда мы говорим о технических деталях языка, мы свободно оперируем неопределенными именами, такими как
Пожалуйста, помните, что эту книгу не следует рассматривать как полное описание синтаксиса и семантики языка С++ (даже по отношению к свойствам, которые мы рассматриваем). Стандарт ISO С++ состоит из 756 страниц, а объем книги Язык программирования Страуструпа, предназначенной для опытных программистов, превышает 1000 страниц. Наше издание не конкурирует с этими книгами ни по охвату материала, ни по полноте его изложения, но соревнуется с ними по удобопонятности текста и по объему времени, которое требуется для его чтения.
8.2. Объявления и определения
Объявление (declaration) — это инструкция, которая вводит имя в область видимости (раздел 8.4), устанавливает тип именованной сущности (например, переменной или функции) и, необязательно, устанавливает инициализацию (например, начальное значение или тело функции).
Рассмотрим пример.
До того как имя в программе на языке С++ будет использовано, оно должно быть объявлено. Рассмотрим пример.
Компилятор выдаст как минимум три сообщения об ошибках, связанных с необъявленными идентификаторами: сущности
Теперь осталось только две ошибки, вызванных отсутствием определения идентификаторов. При создании реальных программ большинство определений размещают в
Однако нам по-прежнему необходимо объявить переменные
Этот код компилируется без ошибок, поскольку каждое имя было определено, но он не проходит редактирование связей (см. раздел 2.4), поскольку в нем не определена функция
Объявление, которое полностью описывает объявленную сущность, называют определением (definition). Рассмотрим пример.
Каждое определение — это объявление, но только некоторые объявления одновременно являются определениями. Ниже приведены некоторые примеры объявлений, которые не являются определениями; каждому из них должно соответствовать определение, размещенное где-то в другом месте кода.
Сравнивая определения и объявления, мы придерживаемся общепринятого соглашения, которое устанавливает, что объявлением считается только объявление, не являющееся определением, даже если вас немного запутывает такая терминология.
Определение устанавливает, на что именно ссылается имя. В частности, определение переменной выделяет память для этой переменной. Следовательно, ни одну сущность невозможно определить дважды. Рассмотрим пример.