Чем прилагаемые файлы отличаются от файлов кода
По мере того, как программы становятся больше (и используют больше файлов), становится всё более утомительным давать предварительные объявления каждой функции, которую вы хотите использовать, и которая определена в другом файле. Было бы неплохо, если бы вы могли поместить все свои предварительные объявления в одно место, а затем импортировать их, когда они вам понадобятся?
Исходные файлы кода C++ (с расширением .cpp ) – это не единственные файлы, которые обычно встречаются в программах на C++. Другой тип файлов – это заголовочный файл (иногда просто заголовок). Заголовочные файлы обычно имеют расширение .h , но иногда вы можете встретить их с расширением .hpp или вообще без расширения. Основная цель заголовочного файла – распространять объявления в исходные файлы кода.
Ключевой момент
Заголовочные файлы позволяют нам размещать объявления в одном месте, а затем импортировать их туда, где они нам нужны. Это может сэкономить много времени при наборе текста в проектах из нескольких файлов.
Разница между файлом и папкой
Включение заголовочного файла в соответствующий исходный файл
Позже вы увидите, что большинство исходных файлов включают свой соответствующий заголовочный файл, даже если он им не нужен. Зачем?
Включение заголовочного файла в исходный файл увеличивает прямую совместимость. Очень вероятно, что в будущем вы добавите больше функций или измените существующие таким образом, что им нужно будет знать о существовании друг друга.
Когда мы углубимся в изучение стандартной библиотеки, вы будете включать множество заголовочных файлов библиотек. Если вам потребовалось включение в заголовочном файле, оно, вероятно, понадобилось вам для объявления функции. Это означает, что вам также потребуется такое же включение в исходный файл. Это приведет к тому, что в исходном файле у вас будет копия включений заголовочного файла. Включив заголовочный файл в исходный файл, исходный файл получит доступ ко всему, к чему имел доступ заголовочный файл.
При разработке библиотеки включение заголовочного файла в исходный файл может даже помочь в раннем обнаружении ошибок.
Лучшая практика
При написании исходного файла включите в него соответствующий заголовочный файл (если он существует), даже если он вам пока не нужен.
Что такое неисполняемые файлы
Файлы, которые непосредственно не исполняются процессором, называются неисполняемыми файлами. На компьютере доступны различные неисполняемые файлы.
Рисунок 2: Файлы Word и Excel
Ниже приведены некоторые неисполняемые типы файлов с примерами.
Аудио файлы - .mp3, .wpl
Сжатые файлы - .tar, .z, .zip
Данные и файлы базы данных - .dat (файлы данных), .db (файлы базы данных), файлы .csv (файлы значений, разделенные запятыми), .log (файлы журналов), .xml, .sql
Системные файлы - .dll (файл DLL), .sys (системный файл Windows), .tmp (временный файл)
Интернет Связанные файлы - .html (файл языка гипертекстовой разметки), .css (файл каскадных таблиц стилей), .js (файл JavaScript), .jsp (файл страниц сервера Java)
Файлы презентаций - .ppt (файл PowerPoint)
Файлы электронных таблиц - .xsl (файл MS Excel)
Word и текстовые файлы - .doc (файл Microsoft Word), .pdf (файл PDF, .txt (простой текстовый файл)
Файлы изображений - .bmp (файлы растровых изображений), .jpg (изображение GIF), .jpg, .jpg (изображение JPEG), .jpg (изображение PNG), .tif (изображение TIF)
Видео файлы - .avi (файл AVI), .mp4 (видеофайл MPEG4), .mpg (видеофайл MPEG), .wmv (видеофайл Windows Media)
Ключевые области покрыты
1. Что такое объектный файл
- определение, функциональность
2. Что такое исполняемый файл
- определение, функциональность
3. Какова связь между объектным файлом и исполняемым файлом
- Схема ассоциации
4. В чем разница между объектным файлом и исполняемым файлом
- Сравнение основных различий
Разница между исполняемыми и неисполняемыми файлами
Определение
Файл - это компьютерный ресурс для дискретной записи данных в компьютерное запоминающее устройство. Папка - это каталог, содержащий другие файлы и папки.
Связь между объектным файлом и исполняемым файлом
- Объектные файлы объединяются, чтобы создать исполняемый файл.
Что такое исполняемые файлы
Исполняемый файл - это тип компьютерного файла, который запускает программу при ее открытии. Другими словами, он выполняет набор инструкций при открытии файла. Исполняемые файлы могут быть скомпилированными программами или скриптами. Основным типом расширения исполняемых файлов в Windows является .EXE и .APP в Mac Computers.
Рисунок 1: Запуск исполняемого файла
Исходные программы этих файлов преобразуются в двоичные файлы. Следовательно, они могут напрямую выполняться процессором. Компьютер Mac не может запустить файл .EXE, а компьютер Windows не может запустить файл .APP. Это потому, что операционная система не может распознать формат для выполнения кода.
Скрипт содержит набор инструкций. Пользователь может открыть эти файлы в текстовых редакторах и просмотреть код. Эти сценарии требуют интерпретатора для запуска. Например, Python Script требует интерпретатора Python для выполнения кода. PHP-скрипт требует PHP-интерпретатора для выполнения кода. Если эти интерпретаторы недоступны, сценарии будут открыты как текстовые файлы.
Не нарушает ли определение класса в заголовочном файле правило одного определения?
Не должно. Если ваш заголовочный файл имеет надлежащие средства защиты заголовка, то не должно быть возможности включить определение класса более одного раза в один и тот же файл.
Ключевые области покрыты
1. Что такое исполняемые файлы
- определение, типы
2. Что такое неисполняемые файлы
- определение, типы
3. Разница между исполняемыми и неисполняемыми файлами
- Сравнение основных различий
Разница между объектным файлом и исполняемым файлом
выполнение
Процессор может напрямую выполнять исполняемые файлы. Процессор не может напрямую выполнять неисполняемые файлы.
Исполняемые файлы могут быть скомпилированными программами или скриптами. Неисполняемые файлы могут быть аудио, видео, изображения, таблицы, базы данных, данные, файлы слов и т. Д.
Библиотеки
Разделение определения и реализации класса очень распространено для библиотек, которые вы можете использовать для расширения возможностей своей программы. Во всех своих программах вы включаете заголовки, которые принадлежат стандартной библиотеке, например, iostream , string , vector , array и другие. Обратите внимание, что вам не нужно добавлять в свои проекты iostream.cpp , string.cpp , vector.cpp или array.cpp . Вашей программе нужны объявления из файлов заголовков, чтобы компилятор мог проверить, что вы пишете синтаксически правильные программы. Однако реализации для классов, принадлежащих стандартной библиотеке C++, содержатся в предварительно скомпилированном файле, который подключается на этапе компоновки. Вы никогда не видите кода.
Помимо какого-либо программного обеспечения с открытым исходным кодом (где предоставляются файлы .h и .cpp ), большинство сторонних библиотек предоставляют только файлы заголовков и предварительно скомпилированный файл библиотеки. Для этого есть несколько причин:
- линковка предварительно скомпилированной библиотеки выполняется быстрее, чем перекомпиляция ее каждый раз, когда она вам понадобится;
- одна копия предварительно скомпилированной библиотеки может использоваться несколькими приложениями, тогда как скомпилированный код компилируется в каждый исполняемый файл, который его использует (увеличение размеров файлов);
- соображения интеллектуальной собственности (вы не хотите, чтобы украли ваш код).
Разделение ваших собственных файлов на объявление (заголовок) и реализацию (файл исходного кода) – это не только хорошая организация проекта, но оно также упрощает создание ваших собственных пользовательских библиотек. Создание собственных библиотек выходит за рамки данной серии руководств, но разделение объявления и реализации является предварительным условием для этого.
Определение
Исполняемый файл - это файл, который может быть непосредственно выполнен компьютером и способен выполнять указанные задачи в соответствии с закодированными инструкциями. Неисполняемый файл - это файл, который непосредственно не исполняется процессором и создается для конкретной задачи.
Включение заголовочных файлов из других каталогов
Другой распространенный вопрос связан с тем, как включать заголовочные файлы из других каталогов.
Хотя это будет компилироваться (при условии, что файлы существуют в этих относительных каталогах), обратная сторона этого подхода состоит в том, что он требует от вас отражения структуры каталогов в вашем коде. Если вы когда-нибудь обновите структуру каталогов, ваш код больше не будет работать.
Лучший способ – сообщить вашему компилятору или IDE, что у вас есть куча заголовочных файлов в каком-то другом месте, чтобы он смотрел туда, когда не может найти их в текущем каталоге. Обычно это можно сделать, установив путь включения (include path) или каталог поиска (search directory) в настройках проекта в IDE.
Для пользователей Visual Studio
Кликните правой кнопкой мыши на своем проекте в обозревателе решений и выберите Свойства (Properties), затем вкладку Каталоги VC++.(VC++ Directories). Здесь вы увидите строку с названием «Включаемые каталоги» (Include Directories). Добавьте каталоги, в которых компилятор должен искать дополнительные заголовочные файлы.
Для пользователей Code::Blocks
В Code:: Blocks перейдите в меню Project (Проект) и выберите Build Options (Параметры сборки), затем вкладку Search directories (Каталоги поиска). Добавьте каталоги, в которых компилятор должен искать дополнительные заголовочные файлы.
Для пользователей GCC/G++
Используя g++, вы можете использовать параметр -I , чтобы указать альтернативный каталог для включения.
Хороший момент в этом подходе заключается в том, что если вы когда-нибудь измените структуру каталогов, вам нужно будет изменить только одну настройку компилятора или IDE, а не каждый файл кода.
Использование заголовочных файлов стандартной библиотеки
Рассмотрим следующую программу:
Эта программа печатает « Hello, world! » в консоль с помощью std::cout . Однако эта программа никогда не предоставляла определение или объявление для std::cout , поэтому как компилятор узнает, что такое std::cout ?
Ключевой момент
Когда дело доходит до функций и переменных, стоит помнить, что заголовочные файлы обычно содержат только объявления функций и переменных, а не их определения (в противном случае может произойти нарушение правила одного определения). std::cout объявлен в заголовке iostream, но определен как часть стандартной библиотеки C++, которая автоматически подключается к вашей программе на этапе линкера.
Рисунок 1 – Диаграмма процесса сборки
Лучшая практика
Заголовочные файлы обычно не должны содержать определений функций и переменных, чтобы не нарушать правило одного определения. Исключение сделано для символьных констант (которые мы рассмотрим в уроке «4.14 – const, constexpr и символьные константы»).
Определение
Объектный файл - это файл, который содержит объектный код с машинным кодом перемещаемого формата, который не может быть непосредственно выполнен. Исполняемый файл - это файл, который может быть непосредственно выполнен компьютером и способен выполнять указанные задачи в соответствии с закодированными инструкциями. Следовательно, это объясняет основное различие между объектным файлом и исполняемым файлом.
Другое различие между объектным файлом и исполняемым файлом состоит в том, что объектный файл является промежуточным файлом, но исполняемый файл является конечным файлом.
Написание собственных заголовочных файлов
А теперь вернемся к примеру, который мы обсуждали в предыдущем уроке. Когда мы закончили, у нас было два файла, add.cpp и main.cpp , которые выглядели так:
(Если вы воссоздаете этот пример с нуля, не забудьте добавить add.cpp в свой проект, чтобы он компилировался).
В этом примере мы использовали предварительное объявление, чтобы при компиляции main.cpp компилятор знал, что такое идентификатор add . Как упоминалось ранее, добавление предварительных объявлений для каждой функции, которую вы хотите использовать, и которая находится в другом файле, вручную может быстро стать утомительным.
Давайте напишем заголовочный файл, чтобы избавиться от этого бремени. Написать заголовочный файл на удивление легко, поскольку файлы заголовков состоят только из двух частей:
- защита заголовка, о которой мы поговорим более подробно в следующем уроке («2.11 – Защита заголовков»);
- фактическое содержимое файла заголовка, которое должно быть предварительными объявлениями для всех идентификаторов, которые мы хотим, чтобы другие файлы могли видеть.
Добавление заголовочного файла в проект работает аналогично добавлению исходного файла (рассматривается в уроке «2.7 – Программы с несколькими файлами исходного кода»). Если вы используете IDE, выполните такие же действия и при появлении запроса выберите Файл заголовка (или C/C++ header) вместо Файла С++ (или C/C++ source). Если вы используете командную строку, просто создайте новый файл в своем любимом редакторе.
Лучшая практика
При именовании файлов заголовков используйте расширение .h .
Заголовочные файлы часто идут в паре с файлами исходного кода, при этом заголовочный файл предоставляет предварительные объявления для соответствующего исходного файла. Поскольку наш заголовочный файл будет содержать предварительное объявление для функций, определенных в add.cpp , мы назовем наш новый заголовочный файл add.h .
Лучшая практика
Если заголовочный файл идет в паре с файлом исходного кода (например, add.h с add.cpp ), они оба должны иметь одинаковое базовое имя ( add ).
Вот наш завершенный заголовочный файл:
Следовательно, наша программа будет правильно компилироваться и компоноваться.
Рисунок 2 – Диаграмма процесса сборки
операции
Пользователь может создавать, читать, изменять, удалять и переименовывать файлы. Кроме того, он может распечатывать содержимое файла по электронной почте. С другой стороны, пользователь может создавать, переименовывать, удалять и копировать папки.
Что такое папка
Папка хранит файлы и папки. Это также называется каталогом. Если все файлы находятся в одном и том же месте, будет сложно определить конкретный файл. Поэтому папки помогают упорядочить файлы. Например, пользователь может хранить письменные документы в одной папке, а аудиофайлы - в другой. Другими словами, папки помогают организовывать и разделять файлы. Пользователь может выполнять такие операции, как создание, копирование и удаление папок.
Рисунок 1: Папка
Папка может состоять из нескольких файлов любого формата. Кроме того, он может хранить другие папки со своими файлами.
Что такое исполняемый файл
После написания программы на C, если есть какие-либо синтаксические ошибки, программист должен их отредактировать. Однако если нет синтаксических ошибок, компилятор преобразует исходный код в объектный файл. Затем компоновщик выполняет процесс компоновки. Он берет один или несколько объектных файлов, сгенерированных компилятором, и объединяет их в один исполняемый файл. Кроме того, он связывает другие программные файлы и функции, необходимые программе. Например, если программа имеет функцию «exp ()», компоновщик связывает программу с математической библиотекой системы.
Рисунок 2: Создание исполняемого файла
Программист не понимает инструкции в исполняемом файле, но процессор может прочитать и понять эти инструкции. Следовательно, ЦПУ непосредственно выполняет исполняемый файл для выполнения определенных задач в программе.
Что такое объектный файл
Прежде всего, программа C - это набор инструкций, написанных на языке программирования C для выполнения конкретной задачи. Эта программа называется исходным кодом. Программист может читать и понимать исходный код, но процессор не понимает его. Поэтому необходимо преобразовать исходный код в машинно-понятный формат. Код объекта генерируется после компиляции исходного кода.
Рисунок 1: Исходный код
Объектный файл - это другое имя для объектного кода. Объектный файл имеет расширение .obj в среде Windows. Кроме того, объектный файл имеет. o расширение файла в среде Linux. Однако ЦП не может напрямую выполнить объектный файл.
Заключение
Существуют различные типы компьютерных файлов. Эти файлы могут хранить текст, изображения, компьютерные программы, видео, аудио и ряд других данных в зависимости от типа файла. Разница между файлом и папкой заключается в том, что в файле хранятся данные, а в папке - файлы и папки.
главное отличие между исполняемыми и неисполняемыми файлами является то, что исполняемые файлы непосредственно исполняются процессором, в то время как неисполняемые файлы напрямую не исполняются процессором.
Исполняемый файл исполняется ЦП при открытии файла. Это может быть скомпилированная программа или скрипт. Основной формат исполняемых файлов для Windows - .EXE, в то время как Mac Computers имеет формат .APP. Однако важно избегать запуска исполняемых файлов из неизвестных источников, поскольку они могут содержать вредоносный код. Непосредственный запуск ненадежных исполняемых файлов может повлиять на данные и ресурсы компьютера. Другие типы файлов, такие как аудио, изображения, видео, слова, электронные таблицы, файлы данных, попадают в неисполняемые файлы. Эти файлы непосредственно не исполняются процессором. Кроме того, они могут иметь различные форматы файлов в зависимости от типа файла.
Не нарушает ли определение функций-членов в заголовке правило одного определения?
По-разному. Функции-члены, определенные внутри определения класса, считаются неявно встраиваемыми (inline). Встраиваемые (inline) функции освобождаются от правила одного определения относительно одного определения в программе. Это означает, что нет проблем с определением тривиальных функций-членов (таких как функции доступа) внутри определения самого класса.
Функции-члены, определенные вне определения класса, обрабатываются как обычные функции и подчиняются правилу одного определения относительно одного определения в программе. Следовательно, эти функции должны быть определены в файле исходного кода, а не внутри заголовка. Единственным исключением являются шаблоны функций, о которых мы поговорим в следующей главе.
Прямое выполнение процессором
Кроме того, CPU не может напрямую выполнять объектный файл, в то время как CPU может напрямую выполнять исполняемый файл. Таким образом, это принципиальное различие между объектным файлом и исполняемым файлом.
расширение
Файл имеет расширение. Расширение может быть длиной от трех до четырех символов. Папка не имеет расширения.
Угловые скобки и двойные кавычки
Вам, наверное, интересно, почему мы используем угловые скобки для iostream и двойные кавычки для add.h . Возможно, что заголовочные файлы с таким же именем могут существовать в нескольких каталогах. Использование угловых скобок и двойных кавычек помогает компилятору понять, где ему следует искать заголовочные файлы.
Когда мы используем угловые скобки, мы сообщаем препроцессору, что это заголовочный файл, который мы не писали сами. Компилятор будет искать заголовок только в каталогах, указанных в каталогах включаемых файлов (include directories). Каталоги включаемых файлов настраиваются как часть вашего проекта / настроек IDE / настроек компилятора и обычно по умолчанию используются для каталогов, содержащих заголовочные файлы, которые поставляются с вашим компилятором и/или ОС. Компилятор не будет искать заголовочный файл в каталоге исходного кода вашего проекта.
Когда мы используем двойные кавычки, мы сообщаем препроцессору, что это заголовочный файл, который написали мы. Компилятор сначала будет искать этот заголовочный файл в текущем каталоге. Если он не сможет найти там подходящий заголовочный файл, он будет искать его в каталогах включаемых файлов.
Правило
Используйте двойные кавычки, чтобы включать заголовочные файлы, которые написали вы или которые, как ожидается, будут найдены в текущем каталоге. Угловые скобки используйте, чтобы включать заголовочные файлы, которые поставляются с вашим компилятором, ОС или сторонними библиотеками, которые вы установили в другом месте своей системы.
Основные условия
Компьютер, Файл, Папка
Рекомендации по использованию заголовочных файлов
Вот еще несколько рекомендаций по созданию и использованию заголовочных файлов.
главное отличие между объектным файлом и исполняемым файлом объектный файл - это файл, созданный после компиляции исходного кода, в то время как исполняемый файл - это файл, созданный после связывания набора объектных файлов вместе с помощью компоновщика.
C - это язык программирования общего назначения высокого уровня. Более того, это структурированный язык программирования, который помогает писать эффективные программы. Операционные системы, языковые компиляторы, текстовые редакторы, сетевые драйверы, базы данных - некоторые приложения языка программирования Си. Объектный файл и исполняемый файл - это два файла, связанных с программированием на Си.
копирование
Пользователь может копировать данные из одного файла в другой. Пользователь может скопировать одну папку в другую папку.
Что такое файл
Файл состоит из набора данных. Операционная система может хранить файлы на жестких дисках, оптических дисках или других устройствах хранения. Пользователь может выполнять такие операции, как открытие, чтение, изменение и закрытие файлов.
Рисунок 2: Файл Word
Существуют различные типы файлов. Изображение с камеры или телефона, скопированное на компьютер, может быть в формате JPG или PNG. Есть также видео файлы формата mp3, mp4. Есть файлы документов, созданные в текстовом редакторе, таком как MS Word. Текстовые документы, созданные с помощью Блокнота, являются текстовыми файлами. Эти файлы содержат текстовую информацию.
Кроме того, некоторые файлы сжимаются в папки, но они все еще рассматриваются как файлы. Одним из примеров является ZIP-файл. Это папка со многими связанными файлами и папками, но она рассматривается как один файл. Также возможно преобразовать файл из одного формата в другой. Например, файл формата doc может быть преобразован в файл pdf. В целом, все перечисленные типы файлов помогают хранить информацию в одном конкретном месте.
Заключение
Разница между исполняемыми и неисполняемыми файлами заключается в том, что исполняемые файлы непосредственно исполняются процессором, в то время как неисполняемые файлы непосредственно не исполняются процессором. Запуск исполняемого файла может повредить данные и ресурсы, если он состоит из какого-либо вредоносного программного обеспечения.
Все классы, которые мы написали на данный момент, были достаточно простыми, чтобы мы могли реализовать функции-члены непосредственно внутри определения самого класса. Например, вот наш вездесущий класс Date :
Однако по мере того, как классы становятся длиннее и сложнее, наличие всех определений функций-членов внутри класса может затруднить управление классом и работу с ним. Использование уже написанного класса требует понимания только его открытого интерфейса (общедоступных функций-членов), а не понимания того, как класс работает под капотом. Детали реализации функций-членов просто мешают.
К счастью, C++ предоставляет способ отделить часть «объявления» класса от его «реализации». Это делается путем определения функций-членов класса вне определения класса. Для этого просто определите функции-члены класса, как если бы они были обычными функциями, но добавив к функциям префикс из имени класса с помощью оператора разрешения области видимости ( :: ) (так же, как для пространства имен).
Вот наш класс Date с конструктором Date и функцией setDate() , определенными вне определения класса. Обратите внимание, что прототипы этих функций всё еще присутствуют внутри определения класса, но фактическая реализация вынесена за его пределы:
Это довольно просто. Поскольку функции доступа часто представляют собой только одну строку, они обычно остаются в определении класса, даже если их можно переместить за его пределы.
Вот еще один пример, который включает внешний конструктор со списком инициализации членов.
Заключение
В заключение, объектный файл и исполняемый файл - это два файла, связанных с программированием на Си. Основное различие между объектным файлом и исполняемым файлом заключается в том, что объектный файл - это файл, который создается после компиляции исходного кода, в то время как исполняемый файл - это файл, который создается после связывания набора объектных файлов вместе с помощью компоновщика.
Файл и папка - два термина, используемые в вычислениях. Файл - это контейнер для хранения информации. Существуют различные типы файлов, такие как текстовые файлы, файлы данных, изображения, аудиофайлы и видеофайлы. Каждый из этих файлов хранит различный тип информации. С другой стороны, папка является каталогом. Он хранит связанные файлы и папки. Папка помогает организовать файлы в системе.
Помещение определения класса в заголовочный файл
Из урока, посвященного заголовочным файлам, вы узнали, что вы можете помещать объявления функций в заголовочные файлы, чтобы использовать эти функции в нескольких файлах или даже в нескольких проектах. Классы ничем не отличаются. Определения классов можно помещать в заголовочные файлы, чтобы упростить их повторное использование в нескольких файлах или нескольких проектах. Традиционно определение класса помещается в заголовочный файл с тем же именем, что и класс, а функции-члены, определенные вне класса, помещаются в файл .cpp с тем же именем, что и класс.
Вот снова наш класс Date , разбитый на файлы .cpp и .h :
Основные условия
Исполняемые файлы, Неисполняемые файлы
Почему у iostream нет расширения .h ?
Другой часто задаваемый вопрос: «Почему iostream (или любой другой заголовочный файл стандартной библиотеки) не имеет расширения .h ?». Ответ заключается в том, что iostream.h – это другой заголовочный файл, отличающийся от iostream ! Для объяснения требуется небольшой урок истории.
Когда C++ был только создан, все файлы в стандартной библиотеке оканчивались расширением .h . Жизнь была последовательной, и это было хорошо. Исходные версии cout и cin были объявлены в iostream.h . Когда комитет ANSI стандартизировал язык, они решили переместить все функции стандартной библиотеки в пространство имен std , чтобы избежать конфликтов имен с пользовательскими идентификаторами. Однако это представляло проблему: если бы они переместили всю функциональность в пространство имен std , ни одна из старых программ (включая iostream.h ) больше не работала бы!
Кроме того, многие библиотеки, унаследованные от C, которые всё еще используются в C++, получили префикс c (например, stdlib.h стал cstdlib ). Функциональные возможности этих библиотек также были перенесены в пространство имен std , чтобы избежать конфликтов имен.
Лучшая практика
При включении заголовочного файла из стандартной библиотеки используйте версию без расширения (без .h ), если она существует. Пользовательские заголовочные файлы по-прежнему должны использовать расширение .h .
Заголовочные файлы могут включать другие заголовочные файлы
Содержимое этих транзитивных включений доступно для использования в вашем файле исходного кода. Однако не следует полагаться на содержимое заголовков, которые включены транзитивно. Реализация заголовочных файлов может со временем меняться или отличаться в разных системах. Если это произойдет, ваш код может компилироваться только на определенных системах или может компилироваться сейчас, но перестать в будущем. Этого легко избежать, явно включив все заголовочные файлы, необходимые для содержимого вашего файла исходного кода.
Лучшая практика
К сожалению, нет простого способа определить, полагается ли ваш файл кода случайно на содержимое заголовочного файла, который был включен другим заголовочным файлом.
Вопрос: Я не включил , и моя программа всё равно работала! Почему?
Это один из наиболее часто задаваемых вопросов. Ответ: скорее всего, он работает, потому что вы включили какой-то другой заголовок (например, ), который сам включает . Несмотря на то, что ваша программа будет компилироваться, в соответствии с приведенными выше рекомендациями вам не следует полагаться на это. То, что компилируется у вас, может не компилироваться на машине друга.
Лучшая практика
функциональность
Файл работает как контейнер для хранения данных. С другой стороны, папка работает как контейнер для хранения связанных файлов и папок.
Параметры по умолчанию
Параметры по умолчанию для функций-членов должны быть объявлены в определении класса (в заголовочном файле), где они могут быть видны всем, кто включает заголовок.
Поиск и устранение проблем
Если вы получаете ошибку компилятора, указывающую, что add.h не найден, убедитесь, что файл действительно называется add.h . В зависимости от того, как вы его создали и назвали, возможно, файл может иметь имя вроде add (без расширения), add.h.txt или add.hpp . Также убедитесь, что он находится в том же каталоге, что и остальные исходные файлы.
Ключевые области покрыты
1. Что такое файл
- Определение, особенности, использование
2. Что такое папка
- Определение, особенности, использование
3. В чем разница между файлом и папкой
- Сравнение основных различий
Итак, что я должен определять в файле заголовка, а что в файле .cpp ,и что внутри определения класса, а что вне его?
У вас может возникнуть соблазн поместить все определения ваших функций-членов в заголовочный файл внутри класса. Хотя это будет компилироваться, у этого подхода есть несколько недостатков. Во-первых, как упоминалось выше, это загромождает определение вашего класса. Во-вторых, если вы измените что-либо в коде в заголовке, вам придется перекомпилировать каждый файл, который включает этот заголовок. Это может иметь волновой эффект, когда одно незначительное изменение вызывает необходимость перекомпиляции всей программы (что может быть медленным). Если вы измените код в файле .cpp , необходимо будет перекомпилировать только этот файл .cpp !
Поэтому мы рекомендуем следующее:
- классы, используемые только в одном файле, и которые, как правило, нельзя использовать повторно, определяйте непосредственно в том файле .cpp , где они используются;
- классы, используемые в нескольких файлах или предназначенные для повторного использования, определяйте в файле .h с тем же именем, что и класс;
- тривиальные функции-члены (тривиальные конструкторы или деструкторы, функции доступа и т.д.) могут быть определены внутри класса;
- нетривиальные функции-члены должны быть определены в файле .cpp с тем же именем, что и класс.
В будущих уроках большинство наших классов будет определено в файле .cpp , а все функции будут реализованы непосредственно в определении класса. Это сделано для удобства и для краткости примеров. В реальных проектах классы гораздо чаще помещаются в их собственные исходные и заголовочные файлы, и вы должны привыкнуть к этому.
Основные условия
Язык C, исполняемый файл, объектный файл
функциональность
Более того, компилятор преобразует исходный код в объектный файл. Однако компоновщик связывает объектные файлы с системной библиотекой и объединяет объектные файлы вместе, чтобы создать исполняемый файл.
Читайте также: