Ссылка на плейлист со всеми уроками "Программирование на языке 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++ есть способы, позволяющие поместить определение в заголовочный файл, не вызвав при этом ошибки компоновщика, но, как правило, это приводит к увеличению объектного файла и программы в целом.