SlideShare a Scribd company logo
1 of 8
Download to read offline
Программирование на языке C++
Лекция 1
Структура кода на C++
Александр Смаль
1/1
Разбиение программы на файлы
Зачем разбивать программу на файлы?
∙ С небольшими файлами удобнее работать.
∙ Разбиение на файлы структурирует код.
∙ Позволяет нескольким программистам разрабатывать
приложение одновременно.
∙ Ускорение повторной компиляции при небольших
изменениях в отдельных частях программы.
Файлы с кодом на C++ бывают двух типов:
1. файлы с исходным кодом (расширение .cpp, иногда .C),
2. заголовочные файлы (расширение .hpp или .h).
2/1
Заголовочные файлы
∙ Файл foo.cpp:
// определение (definition) функции foo
void foo()
{
bar ();
}
∙ Файл bar.cpp:
// определение (definition) функции bar
void bar() { }
Компиляция этих файлов выдаст ошибку.
3/1
Заголовочные файлы
∙ Файл foo.cpp:
// объявление (declaration) функции bar
void bar ();
// определение (definition) функции foo
void foo()
{
bar ();
}
∙ Файл bar.cpp:
// определение (definition) функции bar
void bar() { }
4/1
Заголовочные файлы
Предположим, что мы изменили функцию bar.
∙ Файл foo.cpp:
void bar ();
void foo()
{
bar ();
}
∙ Файл bar.cpp:
int bar() { return 1; }
Данный код некорректен — объявление отличается от
определения. (Неопределённое поведение.)
5/1
Заголовочные файлы
Добавим заголовочный файл bar.hpp.
∙ Файл foo.cpp:
#include "bar.hpp"
void foo()
{
bar ();
}
∙ Файл bar.cpp:
int bar() { return 1; }
∙ Файл bar.hpp:
int bar ();
6/1
Двойное включение
Может случиться двойное включение заголовочного файла.
∙ Файл foo.cpp:
#include "foo.hpp"
#include "bar.hpp"
void foo()
{
bar ();
}
∙ Файл foo.hpp:
#include "bar.hpp"
void foo ();
7/1
Стражи включения
Это можно исправить двумя способами:
∙ (наиболее переносимо) Файл bar.hpp:
#ifndef BAR_HPP
#define BAR_HPP
int bar ();
#endif
∙ (наиболее просто) Файл bar.hpp:
#pragma once
int bar ();
Резюме: .cpp — для определений, .hpp — для объявлений.
8/1

More Related Content

What's hot

языки программирования
языки программированияязыки программирования
языки программированияDmitry Kulikov
 
Platypus platform ivbit
Platypus platform ivbitPlatypus platform ivbit
Platypus platform ivbitjskonst
 
Дизайн платформа в Avito - Александр Лобашев (Avito)
Дизайн платформа в Avito - Александр Лобашев (Avito)Дизайн платформа в Avito - Александр Лобашев (Avito)
Дизайн платформа в Avito - Александр Лобашев (Avito)AvitoTech
 
использование .Net framework
использование .Net frameworkиспользование .Net framework
использование .Net frameworkjskonst
 
Rempl — крутая платформа для крутых инструментов - Роман Дворнов (Avito)
Rempl — крутая платформа для крутых инструментов - Роман Дворнов (Avito)Rempl — крутая платформа для крутых инструментов - Роман Дворнов (Avito)
Rempl — крутая платформа для крутых инструментов - Роман Дворнов (Avito)AvitoTech
 
About emacs
About emacsAbout emacs
About emacsjskonst
 
Игорь Новак — Редакторы
Игорь Новак — РедакторыИгорь Новак — Редакторы
Игорь Новак — РедакторыYandex
 
Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)AvitoTech
 
Go в автобусе
Go в автобусеGo в автобусе
Go в автобусеArtem Kovardin
 
Lala qasanzade 9r2 c++
Lala qasanzade 9r2  c++Lala qasanzade 9r2  c++
Lala qasanzade 9r2 c++lala9r2
 
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++Yandex
 
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++Yandex
 
Mixing c++ and python
Mixing c++ and pythonMixing c++ and python
Mixing c++ and pythoncorehard_by
 
Подключение внешних библиотек в python
Подключение внешних библиотек в pythonПодключение внешних библиотек в python
Подключение внешних библиотек в pythonMaxim Shalamov
 
Lala qasanzade 9r2 c++
Lala qasanzade 9r2  c++Lala qasanzade 9r2  c++
Lala qasanzade 9r2 c++lala9r2
 
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав БахмутовGo в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав БахмутовYandex
 

What's hot (20)

Install denwer
Install denwerInstall denwer
Install denwer
 
Problem my sql_2
Problem my sql_2Problem my sql_2
Problem my sql_2
 
языки программирования
языки программированияязыки программирования
языки программирования
 
Platypus platform ivbit
Platypus platform ivbitPlatypus platform ivbit
Platypus platform ivbit
 
Дизайн платформа в Avito - Александр Лобашев (Avito)
Дизайн платформа в Avito - Александр Лобашев (Avito)Дизайн платформа в Avito - Александр Лобашев (Avito)
Дизайн платформа в Avito - Александр Лобашев (Avito)
 
использование .Net framework
использование .Net frameworkиспользование .Net framework
использование .Net framework
 
Rempl — крутая платформа для крутых инструментов - Роман Дворнов (Avito)
Rempl — крутая платформа для крутых инструментов - Роман Дворнов (Avito)Rempl — крутая платформа для крутых инструментов - Роман Дворнов (Avito)
Rempl — крутая платформа для крутых инструментов - Роман Дворнов (Avito)
 
About emacs
About emacsAbout emacs
About emacs
 
Игорь Новак — Редакторы
Игорь Новак — РедакторыИгорь Новак — Редакторы
Игорь Новак — Редакторы
 
Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)
 
378 васильев куницын
378 васильев куницын378 васильев куницын
378 васильев куницын
 
Go в автобусе
Go в автобусеGo в автобусе
Go в автобусе
 
Golang
GolangGolang
Golang
 
Lala qasanzade 9r2 c++
Lala qasanzade 9r2  c++Lala qasanzade 9r2  c++
Lala qasanzade 9r2 c++
 
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
 
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
 
Mixing c++ and python
Mixing c++ and pythonMixing c++ and python
Mixing c++ and python
 
Подключение внешних библиотек в python
Подключение внешних библиотек в pythonПодключение внешних библиотек в python
Подключение внешних библиотек в python
 
Lala qasanzade 9r2 c++
Lala qasanzade 9r2  c++Lala qasanzade 9r2  c++
Lala qasanzade 9r2 c++
 
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав БахмутовGo в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
 

Viewers also liked

D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применениеDEVTYPE
 
Зачем изучать алгоритмы?
Зачем изучать алгоритмы?Зачем изучать алгоритмы?
Зачем изучать алгоритмы?DEVTYPE
 
Keychain Services Programming Guide
Keychain Services Programming GuideKeychain Services Programming Guide
Keychain Services Programming GuideDEVTYPE
 
Линейная алгебра - I. Разбор задач
Линейная алгебра - I. Разбор задачЛинейная алгебра - I. Разбор задач
Линейная алгебра - I. Разбор задачDEVTYPE
 
Жадные алгоритмы: введение
Жадные алгоритмы: введениеЖадные алгоритмы: введение
Жадные алгоритмы: введениеDEVTYPE
 
Скорость роста функций
Скорость роста функцийСкорость роста функций
Скорость роста функцийDEVTYPE
 
Разбор задач модуля Комбинаторика l
Разбор задач модуля Комбинаторика lРазбор задач модуля Комбинаторика l
Разбор задач модуля Комбинаторика lDEVTYPE
 
Основы комбинаторики II. Разбор задач
Основы комбинаторики II. Разбор задачОсновы комбинаторики II. Разбор задач
Основы комбинаторики II. Разбор задачDEVTYPE
 
Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"DEVTYPE
 

Viewers also liked (9)

D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применение
 
Зачем изучать алгоритмы?
Зачем изучать алгоритмы?Зачем изучать алгоритмы?
Зачем изучать алгоритмы?
 
Keychain Services Programming Guide
Keychain Services Programming GuideKeychain Services Programming Guide
Keychain Services Programming Guide
 
Линейная алгебра - I. Разбор задач
Линейная алгебра - I. Разбор задачЛинейная алгебра - I. Разбор задач
Линейная алгебра - I. Разбор задач
 
Жадные алгоритмы: введение
Жадные алгоритмы: введениеЖадные алгоритмы: введение
Жадные алгоритмы: введение
 
Скорость роста функций
Скорость роста функцийСкорость роста функций
Скорость роста функций
 
Разбор задач модуля Комбинаторика l
Разбор задач модуля Комбинаторика lРазбор задач модуля Комбинаторика l
Разбор задач модуля Комбинаторика l
 
Основы комбинаторики II. Разбор задач
Основы комбинаторики II. Разбор задачОсновы комбинаторики II. Разбор задач
Основы комбинаторики II. Разбор задач
 
Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"Разбор задач модуля "Теория графов ll"
Разбор задач модуля "Теория графов ll"
 

Similar to Структура кода на С++

C++ теория
C++ теорияC++ теория
C++ теорияtank1975
 
C++ теория
C++ теорияC++ теория
C++ теорияtank1975
 
C++ теория
C++ теорияC++ теория
C++ теорияtank1975
 
C language lect_04_preface
C language lect_04_prefaceC language lect_04_preface
C language lect_04_prefaceRoman Brovko
 
лабораторная работа №1
лабораторная работа №1лабораторная работа №1
лабораторная работа №1Zhanna Kazakova
 
лабораторная работа №1
лабораторная работа №1лабораторная работа №1
лабораторная работа №1Zhanna Kazakova
 
НуП_Лекция 2. Управление программами.ppt
НуП_Лекция 2. Управление программами.pptНуП_Лекция 2. Управление программами.ppt
НуП_Лекция 2. Управление программами.pptdinarium2016
 
библиотеки программирования
библиотеки программированиябиблиотеки программирования
библиотеки программированияmcroitor
 
Филипп Синицин - Системы контроля версий
Филипп Синицин - Системы контроля версийФилипп Синицин - Системы контроля версий
Филипп Синицин - Системы контроля версийYandex
 
Scripting languages
Scripting languagesScripting languages
Scripting languagesLev Panov
 
Александр Сомов "C++: препроцессор, компилятор, компоновщик"
Александр Сомов "C++: препроцессор, компилятор, компоновщик"Александр Сомов "C++: препроцессор, компилятор, компоновщик"
Александр Сомов "C++: препроцессор, компилятор, компоновщик"Yandex
 
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...Tatyanazaxarova
 
The basic design of the PHP language
 The basic design of the PHP language The basic design of the PHP language
The basic design of the PHP languageVladimir Burdaev
 
Ускоряем сборку С++ проектов. Практика использования unity-сборок
Ускоряем сборку С++ проектов. Практика использования unity-сборокУскоряем сборку С++ проектов. Практика использования unity-сборок
Ускоряем сборку С++ проектов. Практика использования unity-сборокcorehard_by
 

Similar to Структура кода на С++ (20)

C++ теория
C++ теорияC++ теория
C++ теория
 
C++ теория
C++ теорияC++ теория
C++ теория
 
C++ теория
C++ теорияC++ теория
C++ теория
 
C language lect_04_preface
C language lect_04_prefaceC language lect_04_preface
C language lect_04_preface
 
лек13 6
лек13 6лек13 6
лек13 6
 
лабораторная работа №1
лабораторная работа №1лабораторная работа №1
лабораторная работа №1
 
лабораторная работа №1
лабораторная работа №1лабораторная работа №1
лабораторная работа №1
 
НуП_Лекция 2. Управление программами.ppt
НуП_Лекция 2. Управление программами.pptНуП_Лекция 2. Управление программами.ppt
НуП_Лекция 2. Управление программами.ppt
 
лекция 3
лекция 3лекция 3
лекция 3
 
библиотеки программирования
библиотеки программированиябиблиотеки программирования
библиотеки программирования
 
лек11 3
лек11 3лек11 3
лек11 3
 
Turbo pascal. toqrul
Turbo pascal. toqrulTurbo pascal. toqrul
Turbo pascal. toqrul
 
Филипп Синицин - Системы контроля версий
Филипп Синицин - Системы контроля версийФилипп Синицин - Системы контроля версий
Филипп Синицин - Системы контроля версий
 
Scripting languages
Scripting languagesScripting languages
Scripting languages
 
Александр Сомов "C++: препроцессор, компилятор, компоновщик"
Александр Сомов "C++: препроцессор, компилятор, компоновщик"Александр Сомов "C++: препроцессор, компилятор, компоновщик"
Александр Сомов "C++: препроцессор, компилятор, компоновщик"
 
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...
 
The basic design of the PHP language
 The basic design of the PHP language The basic design of the PHP language
The basic design of the PHP language
 
OO Design with C++: 0. Intro
OO Design with C++: 0. IntroOO Design with C++: 0. Intro
OO Design with C++: 0. Intro
 
Ускоряем сборку С++ проектов. Практика использования unity-сборок
Ускоряем сборку С++ проектов. Практика использования unity-сборокУскоряем сборку С++ проектов. Практика использования unity-сборок
Ускоряем сборку С++ проектов. Практика использования unity-сборок
 
Интегрированная среда разработки для функционального языка Refal
Интегрированная среда разработки для функционального языка RefalИнтегрированная среда разработки для функционального языка Refal
Интегрированная среда разработки для функционального языка Refal
 

More from DEVTYPE

Рукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреРукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреDEVTYPE
 
1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойстваDEVTYPE
 
1.3 Описательная статистика
1.3 Описательная статистика1.3 Описательная статистика
1.3 Описательная статистикаDEVTYPE
 
1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространствоDEVTYPE
 
Continuity and Uniform Continuity
Continuity and Uniform ContinuityContinuity and Uniform Continuity
Continuity and Uniform ContinuityDEVTYPE
 
Coin Change Problem
Coin Change ProblemCoin Change Problem
Coin Change ProblemDEVTYPE
 
Recurrences
RecurrencesRecurrences
RecurrencesDEVTYPE
 
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыДиаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыDEVTYPE
 
ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ DEVTYPE
 
Asymptotic Growth of Functions
Asymptotic Growth of FunctionsAsymptotic Growth of Functions
Asymptotic Growth of FunctionsDEVTYPE
 
Кучи
КучиКучи
КучиDEVTYPE
 
Кодирование Хаффмана
Кодирование ХаффманаКодирование Хаффмана
Кодирование ХаффманаDEVTYPE
 
Разбор задач по дискретной вероятности
Разбор задач по дискретной вероятностиРазбор задач по дискретной вероятности
Разбор задач по дискретной вероятностиDEVTYPE
 
Наибольший общий делитель
Наибольший общий делительНаибольший общий делитель
Наибольший общий делительDEVTYPE
 
Числа Фибоначчи
Числа ФибоначчиЧисла Фибоначчи
Числа ФибоначчиDEVTYPE
 
О-символика
О-символикаО-символика
О-символикаDEVTYPE
 
Разбор задач пятого модуля
Разбор задач пятого модуляРазбор задач пятого модуля
Разбор задач пятого модуляDEVTYPE
 
Задачи №2. Работа со звуком.
Задачи №2. Работа со звуком.Задачи №2. Работа со звуком.
Задачи №2. Работа со звуком.DEVTYPE
 
Задача №1. Работа с видео.
Задача №1. Работа с видео.Задача №1. Работа с видео.
Задача №1. Работа с видео.DEVTYPE
 
Тестовое задание для веб-программиста
Тестовое задание для веб-программистаТестовое задание для веб-программиста
Тестовое задание для веб-программистаDEVTYPE
 

More from DEVTYPE (20)

Рукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебреРукописные лекции по линейной алгебре
Рукописные лекции по линейной алгебре
 
1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства1.4 Точечные оценки и их свойства
1.4 Точечные оценки и их свойства
 
1.3 Описательная статистика
1.3 Описательная статистика1.3 Описательная статистика
1.3 Описательная статистика
 
1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство1.2 Выборка. Выборочное пространство
1.2 Выборка. Выборочное пространство
 
Continuity and Uniform Continuity
Continuity and Uniform ContinuityContinuity and Uniform Continuity
Continuity and Uniform Continuity
 
Coin Change Problem
Coin Change ProblemCoin Change Problem
Coin Change Problem
 
Recurrences
RecurrencesRecurrences
Recurrences
 
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицыДиаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
Диаграммы Юнга, плоские разбиения и знакочередующиеся матрицы
 
ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ ЖАДНЫЕ АЛГОРИТМЫ
ЖАДНЫЕ АЛГОРИТМЫ
 
Asymptotic Growth of Functions
Asymptotic Growth of FunctionsAsymptotic Growth of Functions
Asymptotic Growth of Functions
 
Кучи
КучиКучи
Кучи
 
Кодирование Хаффмана
Кодирование ХаффманаКодирование Хаффмана
Кодирование Хаффмана
 
Разбор задач по дискретной вероятности
Разбор задач по дискретной вероятностиРазбор задач по дискретной вероятности
Разбор задач по дискретной вероятности
 
Наибольший общий делитель
Наибольший общий делительНаибольший общий делитель
Наибольший общий делитель
 
Числа Фибоначчи
Числа ФибоначчиЧисла Фибоначчи
Числа Фибоначчи
 
О-символика
О-символикаО-символика
О-символика
 
Разбор задач пятого модуля
Разбор задач пятого модуляРазбор задач пятого модуля
Разбор задач пятого модуля
 
Задачи №2. Работа со звуком.
Задачи №2. Работа со звуком.Задачи №2. Работа со звуком.
Задачи №2. Работа со звуком.
 
Задача №1. Работа с видео.
Задача №1. Работа с видео.Задача №1. Работа с видео.
Задача №1. Работа с видео.
 
Тестовое задание для веб-программиста
Тестовое задание для веб-программистаТестовое задание для веб-программиста
Тестовое задание для веб-программиста
 

Структура кода на С++

  • 1. Программирование на языке C++ Лекция 1 Структура кода на C++ Александр Смаль 1/1
  • 2. Разбиение программы на файлы Зачем разбивать программу на файлы? ∙ С небольшими файлами удобнее работать. ∙ Разбиение на файлы структурирует код. ∙ Позволяет нескольким программистам разрабатывать приложение одновременно. ∙ Ускорение повторной компиляции при небольших изменениях в отдельных частях программы. Файлы с кодом на C++ бывают двух типов: 1. файлы с исходным кодом (расширение .cpp, иногда .C), 2. заголовочные файлы (расширение .hpp или .h). 2/1
  • 3. Заголовочные файлы ∙ Файл foo.cpp: // определение (definition) функции foo void foo() { bar (); } ∙ Файл bar.cpp: // определение (definition) функции bar void bar() { } Компиляция этих файлов выдаст ошибку. 3/1
  • 4. Заголовочные файлы ∙ Файл foo.cpp: // объявление (declaration) функции bar void bar (); // определение (definition) функции foo void foo() { bar (); } ∙ Файл bar.cpp: // определение (definition) функции bar void bar() { } 4/1
  • 5. Заголовочные файлы Предположим, что мы изменили функцию bar. ∙ Файл foo.cpp: void bar (); void foo() { bar (); } ∙ Файл bar.cpp: int bar() { return 1; } Данный код некорректен — объявление отличается от определения. (Неопределённое поведение.) 5/1
  • 6. Заголовочные файлы Добавим заголовочный файл bar.hpp. ∙ Файл foo.cpp: #include "bar.hpp" void foo() { bar (); } ∙ Файл bar.cpp: int bar() { return 1; } ∙ Файл bar.hpp: int bar (); 6/1
  • 7. Двойное включение Может случиться двойное включение заголовочного файла. ∙ Файл foo.cpp: #include "foo.hpp" #include "bar.hpp" void foo() { bar (); } ∙ Файл foo.hpp: #include "bar.hpp" void foo (); 7/1
  • 8. Стражи включения Это можно исправить двумя способами: ∙ (наиболее переносимо) Файл bar.hpp: #ifndef BAR_HPP #define BAR_HPP int bar (); #endif ∙ (наиболее просто) Файл bar.hpp: #pragma once int bar (); Резюме: .cpp — для определений, .hpp — для объявлений. 8/1