Программирование на языке C++ - 23 урок. Структура кода на C++

Опубликовано: 26 Октябрь 2024
на канале: All For All
369
6

Ссылка на плейлист со всеми уроками "Программирование на языке C++" -    • Программирование на языке C++ - 1 уро...  

________________
Автор: Александр Смаль, Михаил Кринкин
Лицензия: https://creativecommons.org/licenses/...
Источник: https://stepik.org/course/7/
____________

Объявление (declaration) — вводит имя, возможно, не определяя деталей. Например, ниже перечислены объявления:

int a; — объявление переменной типа int,
void foo(); — объявление функции с именем foo,
void bar() { foo(); } — объявление функции с именем bar.
Определение (definition) — это объявление, дополнительно определяющее детали, необходимые компилятору. Из перечисленных выше объявлений, определениями являются только два:
int a; — объявление переменной типа int,
void bar() { foo(); } — объявление функции вместе с телом является определением.
Для определения переменной достаточно указать ее тип, а для определения функций, кроме имени, типов параметров и возвращаемого значения, нужно указать еще тело функции. Проще говоря, определение содержит всю информацию, необходимую компилятору, чтобы выделить память для хранения объекта.

В C++ есть также возможность объявить переменную, не определяя ее:
 extern int a;

Ключевое слово extern как раз и позволяет сказать компилятору, что переменную нужно только объявить, при этом не нужно выделять под нее память — память под нее должна быть выделена в другом месте (возможно даже в другом файле).

Программы C++ допускают существование нескольких объявлений одного объекта (переменной, функции и др.), но не допускают наличия нескольких определений. Как правило, нарушение этого принципа приводит к ошибкам компоновщика, но может приводить и к ошибкам компиляции (повторное определение типов).
Кроме указанных в лекции, в C++ также используются следующие расширения:

.cxx, .cc — для файлов с исходным кодом,
.hxx, .hh — для заголовочных файлов.
Интересно отметить, что файлы стандартной библиотеки C++ не используют расширение вовсе, например:
iostream,
algorithm,
vector.
Разделение на файлы с исходным кодом и заголовочные файлы чисто условное, нет правил, запрещающих использовать .cpp файл как заголовочный, однако мы не рекомендуем так делать — использование общепринятых правил именования файлов упростит жизнь вам и вашим коллегам.

Не стоит помещать определения в заголовочные файлы без явной необходимости. В C++ есть способы, позволяющие поместить определение в заголовочный файл, не вызвав при этом ошибки компоновщика, но, как правило, это приводит к увеличению объектного файла и программы в целом.