Где хранятся файлы h
Здравствуйте. Допустим имеется проект, следующей структуры:
Project
____source
________main.cpp
________core
____________core.h
____________core.cpp
________module1
____________module1.h
____________module1.cpp
________.
________moduleN
____________moduleN.h
____________moduleN.cpp
____libs
________core.o
________mdoule1.o
________.
________mdouleN.o
____res
________a.obj
________b.obj
________c.obj
________.
- Как moduleN.cpp должен подключать moduleN.h?
- Как moduleN.cpp должен подключать moduleM.h?
- Нужно ли указывать пути относительно подключающего модуля или относительно корневой директории?
- Если один .h файл подключает другой, как он должен его подключать?
Я как ни пытаюсь, получается либо один модуль ругается, либо другой. Пользуюсь gcc.
- Вопрос задан более трёх лет назад
- 10752 просмотра
Или прописывать абсолютные или относительные пути в "" кавычках
1. Статический анализатор clang часто используется внутри разных IDE и редакторов, просто запуская анализ для каждого файла проекта. Воспримая хедер как файл реализации он обязательно ругнется на прагму, чего в случае с обычными гвардами не произойдет
2. GCC имеет отдельную оптимизацию дерева сборки, основанную на гвардах, прагмы же не обрабатываются.
3. Если у вас в проекте несколько симлинков (скажем билдсистема построила по каким-то нуждам) на один хедер - то прагма не поможет, все упадет.
Некоторые папки можно добавить в путь поиска, чтобы не писать длинные пути.
Давно не писал сюда. Вот такая проблемка возникла: Никогда не писал для win32api, а тут прямо припёрло.
Ну скачал Щупака. Открыл любимую visual studio восьмую, создал проект типа Windows application на C++. Набрал простейший пример:
Нажимаю F5 и вуаля ошибка
1>d:\documents and settings\александр\мои документы\visual studio 2008\projects\test_project1\test_pr oject1\main.cpp(1) : fatal error C1083: Cannot open include file: 'windows.h': No such file or directory
говорит нет такого файла.
Как создать заголовочный файл в Visual Studio?
Вот хочу создать например небольшую библиотеку для часто используемых "кусков" кода. Толковую.
Как создать заголовочный файл в Visual Studio?
Привет Есть много кода. Хочу "раскидать" его по подключаемым файлам. Есть ли в Visual Studio.
Как открыть заголовочный файл через конструктор Visual Studio?
Когда я открываю заголовочный файл формы он открывается в виде кода, а не конструктора.
В настройках проекта нужно указать:
- в настройках компилятора указать путь к папке Include в SDK (параметр Additional Include Directories)
- в настройках линковщика - путь к папке Lib (параметр Additional Library Directories).
Если нет SDK, то нужно скачать Windows SDK для создания прог под винду. Если нужно могу скинуть куда-нибудь под XP (400 МБ) или под 7-ку (1,5 ГБ). Какая у тебя ОС?
Добавлено через 26 минут
Вот для семерки нашел на офф сайте: нажми меня. Если эта ссылка не откроется, тогда смотри страницу загрузки.
Второй вопрос: где найти настройки компилятора и линовщика . Tools->Options это понятно а дальше не пойму.
Добавлено через 34 минуты
Вот ссылка на XP SP2 SDK.
Предыдущая ссылка, кстати, включает в себя все нужные файлы и для XP тоже (кроме 7-ки). Правда качать там 1,5 ГБ
Привет, Всем!
Возможно я иду по тому же пути, что и levandowskiy. Читаю Щупака, проверяю тот же пример:
в VS2013 ошибка другая: Error 1 error C2664: 'int MessageBoxW(HWND,LPCWSTR,LPCWSTR,UINT)' : cannot convert argument 2 from 'const char [20]' to 'LPCWSTR' D:\Temp\Win32Project1_HelloWorld\Win32Project1_HelloWorld\Wi n32Project1_HelloWorld\Source.cpp 7 1 Win32Project1_HelloWorld
Подскажите, у меня Windows8.1, мне тоже SDK надо искать?
Если Щупак - не луший путь для изучнеия WinAPI покажите лучший источник для этих целей. У меня очень простая задача, нужно строить графики по точкам в разных окнах, масштабировать их и накладывать друг на друга иногда, (консоли недостаточно).
Либо используйте юникодные строки:
Либо переключите в настройках проекта кодировку на многобайтовую.
(Проект -> Свойства -> Cвойства конфигурации -> Набор символов -> . )
Dragokas, Спасибо! Так всё работает. У Щупака этого нет, откуда я должен был это узнать? Где мне лучше брать информацию для решения моей задачи?
Добавлено через 3 минуты
Dragokas, И какой вариант с Вашей точки зрения более правильный, кодировку переключить или строку изменить с учётом подсказки Вашей?
Те, кто перешел с Windows XP на Windows Vista, были озадачены тем, где находятся временные файлы Интернета в этой операционной системе.
Угловые скобки и двойные кавычки
Вам, наверное, интересно, почему мы используем угловые скобки для iostream и двойные кавычки для add.h . Возможно, что заголовочные файлы с таким же именем могут существовать в нескольких каталогах. Использование угловых скобок и двойных кавычек помогает компилятору понять, где ему следует искать заголовочные файлы.
Когда мы используем угловые скобки, мы сообщаем препроцессору, что это заголовочный файл, который мы не писали сами. Компилятор будет искать заголовок только в каталогах, указанных в каталогах включаемых файлов (include directories). Каталоги включаемых файлов настраиваются как часть вашего проекта / настроек IDE / настроек компилятора и обычно по умолчанию используются для каталогов, содержащих заголовочные файлы, которые поставляются с вашим компилятором и/или ОС. Компилятор не будет искать заголовочный файл в каталоге исходного кода вашего проекта.
Когда мы используем двойные кавычки, мы сообщаем препроцессору, что это заголовочный файл, который написали мы. Компилятор сначала будет искать этот заголовочный файл в текущем каталоге. Если он не сможет найти там подходящий заголовочный файл, он будет искать его в каталогах включаемых файлов.
Правило
Используйте двойные кавычки, чтобы включать заголовочные файлы, которые написали вы или которые, как ожидается, будут найдены в текущем каталоге. Угловые скобки используйте, чтобы включать заголовочные файлы, которые поставляются с вашим компилятором, ОС или сторонними библиотеками, которые вы установили в другом месте своей системы.
Где находится папка временных интернет-файлов
Начиная с Windows Vista и далее в Windows 7 , папка временных файлов Интернета находится по адресу:
C: \ Users \ имя пользователя \ AppData \ Local \ Microsoft \ Windows \ Temporary Internet Files
В Windows 8 и Windows 8.1 интернет-кэш или временные интернет-файлы хранятся в этой папке:
C: \ Users \ имя пользователя \ AppData \ Local \ Microsoft \ Windows \ INetCache
Предполагая, что ваша Windows установлена на диске C. Чтобы увидеть это, вам нужно не только установить флажок Показать скрытые файлы и папки в параметрах папки, но и снять флажок Скрыть защищенные файлы/папки операционной системы .
Заголовочные файлы могут включать другие заголовочные файлы
Содержимое этих транзитивных включений доступно для использования в вашем файле исходного кода. Однако не следует полагаться на содержимое заголовков, которые включены транзитивно. Реализация заголовочных файлов может со временем меняться или отличаться в разных системах. Если это произойдет, ваш код может компилироваться только на определенных системах или может компилироваться сейчас, но перестать в будущем. Этого легко избежать, явно включив все заголовочные файлы, необходимые для содержимого вашего файла исходного кода.
Лучшая практика
К сожалению, нет простого способа определить, полагается ли ваш файл кода случайно на содержимое заголовочного файла, который был включен другим заголовочным файлом.
Вопрос: Я не включил , и моя программа всё равно работала! Почему?
Это один из наиболее часто задаваемых вопросов. Ответ: скорее всего, он работает, потому что вы включили какой-то другой заголовок (например, ), который сам включает . Несмотря на то, что ваша программа будет компилироваться, в соответствии с приведенными выше рекомендациями вам не следует полагаться на это. То, что компилируется у вас, может не компилироваться на машине друга.
Лучшая практика
Написание собственных заголовочных файлов
А теперь вернемся к примеру, который мы обсуждали в предыдущем уроке. Когда мы закончили, у нас было два файла, 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 – Диаграмма процесса сборки
Почему у 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 .
Включение заголовочного файла в соответствующий исходный файл
Позже вы увидите, что большинство исходных файлов включают свой соответствующий заголовочный файл, даже если он им не нужен. Зачем?
Включение заголовочного файла в исходный файл увеличивает прямую совместимость. Очень вероятно, что в будущем вы добавите больше функций или измените существующие таким образом, что им нужно будет знать о существовании друг друга.
Когда мы углубимся в изучение стандартной библиотеки, вы будете включать множество заголовочных файлов библиотек. Если вам потребовалось включение в заголовочном файле, оно, вероятно, понадобилось вам для объявления функции. Это означает, что вам также потребуется такое же включение в исходный файл. Это приведет к тому, что в исходном файле у вас будет копия включений заголовочного файла. Включив заголовочный файл в исходный файл, исходный файл получит доступ ко всему, к чему имел доступ заголовочный файл.
При разработке библиотеки включение заголовочного файла в исходный файл может даже помочь в раннем обнаружении ошибок.
Лучшая практика
При написании исходного файла включите в него соответствующий заголовочный файл (если он существует), даже если он вам пока не нужен.
Помещение определения класса в заголовочный файл
Из урока, посвященного заголовочным файлам, вы узнали, что вы можете помещать объявления функций в заголовочные файлы, чтобы использовать эти функции в нескольких файлах или даже в нескольких проектах. Классы ничем не отличаются. Определения классов можно помещать в заголовочные файлы, чтобы упростить их повторное использование в нескольких файлах или нескольких проектах. Традиционно определение класса помещается в заголовочный файл с тем же именем, что и класс, а функции-члены, определенные вне класса, помещаются в файл .cpp с тем же именем, что и класс.
Вот снова наш класс Date , разбитый на файлы .cpp и .h :
Параметры по умолчанию
Параметры по умолчанию для функций-членов должны быть объявлены в определении класса (в заголовочном файле), где они могут быть видны всем, кто включает заголовок.
Управление интернет-кешем
Для управления Интернет-кешем откройте Internet Explorer> Свойства обозревателя> Инструменты> Свойства обозревателя> Вкладка «Общие»> История просмотра.
Выберите нужный размер для своего кэша здесь.Вы также можете просмотреть Загруженные программы здесь, нажав «Просмотр объектов» . Вместо того, чтобы скрывать папку и т. Д. В параметрах папки explors, вы можете просмотреть содержимое папки «Временные файлы Интернета», просто нажав «Просмотреть файлы» . Если вы хотите переместить кеш в другое место, нажмите «Переместить папку» , чтобы сделать это. Вам будет предложено установить новое местоположение.
Включение заголовочных файлов из других каталогов
Другой распространенный вопрос связан с тем, как включать заголовочные файлы из других каталогов.
Хотя это будет компилироваться (при условии, что файлы существуют в этих относительных каталогах), обратная сторона этого подхода состоит в том, что он требует от вас отражения структуры каталогов в вашем коде. Если вы когда-нибудь обновите структуру каталогов, ваш код больше не будет работать.
Лучший способ – сообщить вашему компилятору или 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, а не каждый файл кода.
Итак, что я должен определять в файле заголовка, а что в файле .cpp ,и что внутри определения класса, а что вне его?
У вас может возникнуть соблазн поместить все определения ваших функций-членов в заголовочный файл внутри класса. Хотя это будет компилироваться, у этого подхода есть несколько недостатков. Во-первых, как упоминалось выше, это загромождает определение вашего класса. Во-вторых, если вы измените что-либо в коде в заголовке, вам придется перекомпилировать каждый файл, который включает этот заголовок. Это может иметь волновой эффект, когда одно незначительное изменение вызывает необходимость перекомпиляции всей программы (что может быть медленным). Если вы измените код в файле .cpp , необходимо будет перекомпилировать только этот файл .cpp !
Поэтому мы рекомендуем следующее:
- классы, используемые только в одном файле, и которые, как правило, нельзя использовать повторно, определяйте непосредственно в том файле .cpp , где они используются;
- классы, используемые в нескольких файлах или предназначенные для повторного использования, определяйте в файле .h с тем же именем, что и класс;
- тривиальные функции-члены (тривиальные конструкторы или деструкторы, функции доступа и т.д.) могут быть определены внутри класса;
- нетривиальные функции-члены должны быть определены в файле .cpp с тем же именем, что и класс.
В будущих уроках большинство наших классов будет определено в файле .cpp , а все функции будут реализованы непосредственно в определении класса. Это сделано для удобства и для краткости примеров. В реальных проектах классы гораздо чаще помещаются в их собственные исходные и заголовочные файлы, и вы должны привыкнуть к этому.
Не нарушает ли определение класса в заголовочном файле правило одного определения?
Не должно. Если ваш заголовочный файл имеет надлежащие средства защиты заголовка, то не должно быть возможности включить определение класса более одного раза в один и тот же файл.
Не нарушает ли определение функций-членов в заголовке правило одного определения?
По-разному. Функции-члены, определенные внутри определения класса, считаются неявно встраиваемыми (inline). Встраиваемые (inline) функции освобождаются от правила одного определения относительно одного определения в программе. Это означает, что нет проблем с определением тривиальных функций-членов (таких как функции доступа) внутри определения самого класса.
Функции-члены, определенные вне определения класса, обрабатываются как обычные функции и подчиняются правилу одного определения относительно одного определения в программе. Следовательно, эти функции должны быть определены в файле исходного кода, а не внутри заголовка. Единственным исключением являются шаблоны функций, о которых мы поговорим в следующей главе.
Использование заголовочных файлов стандартной библиотеки
Рассмотрим следующую программу:
Эта программа печатает « Hello, world! » в консоль с помощью std::cout . Однако эта программа никогда не предоставляла определение или объявление для std::cout , поэтому как компилятор узнает, что такое std::cout ?
Ключевой момент
Когда дело доходит до функций и переменных, стоит помнить, что заголовочные файлы обычно содержат только объявления функций и переменных, а не их определения (в противном случае может произойти нарушение правила одного определения). std::cout объявлен в заголовке iostream, но определен как часть стандартной библиотеки C++, которая автоматически подключается к вашей программе на этапе линкера.
Рисунок 1 – Диаграмма процесса сборки
Лучшая практика
Заголовочные файлы обычно не должны содержать определений функций и переменных, чтобы не нарушать правило одного определения. Исключение сделано для символьных констант (которые мы рассмотрим в уроке «4.14 – const, constexpr и символьные константы»).
Контроль, как Internet Explorer должен использовать кэш
У вас есть 4 варианта:
- Каждый раз, когда я захожу на веб-страницу : это гарантирует, что информация, которую вы видите, всегда актуальна, но может немного замедлить просмотр.
- Каждый раз, когда я запускаю Internet Explorer : это приведет к тому, что IE будет проверять наличие более новой версии, один раз за сеанс IE. Проверка выполняется при первом посещении страницы, но не до тех пор, пока вы не перезапустите браузер.
- Автоматически . Это опция по умолчанию. Здесь IE видит частоту обновления страниц. Если страница не обновляется часто, IE уменьшает частоту, с которой он проверяет эту страницу.
- Никогда . С помощью этой опции Internet Explorer никогда не проверяет наличие новых файлов и всегда отображает содержимое кеша.
Примечание. Даже после обновления страницы у вас создается впечатление, что ваш IE, кажется, читает из кэша, как, например, чтение вчерашних новостей, когда он должен загружаться заново, просто нажмите и удерживайте клавишу Shift, а затем нажмите, чтобы Refresh.
Всегда полезно очищать кэш время от времени, в зависимости от ваших привычек просмотра. Сделайте это еженедельно или хотя бы ежемесячной привычкой. Вы можете использовать утилиту очистки диска или Quick Clean, чтобы сделать это.
Перейдите сюда, чтобы узнать, почему создаются временные файлы в Windows, и здесь, чтобы прочитать о папке «Расположение файлов cookie» в Windows 7/8. Папка установщика Windows – это еще одна системная папка, о которой вы можете прочитать.
Все классы, которые мы написали на данный момент, были достаточно простыми, чтобы мы могли реализовать функции-члены непосредственно внутри определения самого класса. Например, вот наш вездесущий класс Date :
Однако по мере того, как классы становятся длиннее и сложнее, наличие всех определений функций-членов внутри класса может затруднить управление классом и работу с ним. Использование уже написанного класса требует понимания только его открытого интерфейса (общедоступных функций-членов), а не понимания того, как класс работает под капотом. Детали реализации функций-членов просто мешают.
К счастью, C++ предоставляет способ отделить часть «объявления» класса от его «реализации». Это делается путем определения функций-членов класса вне определения класса. Для этого просто определите функции-члены класса, как если бы они были обычными функциями, но добавив к функциям префикс из имени класса с помощью оператора разрешения области видимости ( :: ) (так же, как для пространства имен).
Вот наш класс Date с конструктором Date и функцией setDate() , определенными вне определения класса. Обратите внимание, что прототипы этих функций всё еще присутствуют внутри определения класса, но фактическая реализация вынесена за его пределы:
Это довольно просто. Поскольку функции доступа часто представляют собой только одну строку, они обычно остаются в определении класса, даже если их можно переместить за его пределы.
Вот еще один пример, который включает внешний конструктор со списком инициализации членов.
Поиск и устранение проблем
Если вы получаете ошибку компилятора, указывающую, что add.h не найден, убедитесь, что файл действительно называется add.h . В зависимости от того, как вы его создали и назвали, возможно, файл может иметь имя вроде add (без расширения), add.h.txt или add.hpp . Также убедитесь, что он находится в том же каталоге, что и остальные исходные файлы.
Расположение папки временных файлов Интернета
Работа в Интернете может привести к определенным угрозам безопасности. Вы можете столкнуться с вредоносными программами на вашем компьютере, или троянский загрузчик тайно загрузит нежелательную программу, или вы даже можете обнаружить, что ваш браузер взломан! Невинно нажимая на ссылку в электронном письме или даже вводя неверный веб-адрес, вы можете обнаружить, что ваш браузер посещает «враждебный» сайт.
Для защиты от этих угроз IE в Windows Vista и более поздних версиях работает в защищенном режиме . А кэш теперь рассматривается как виртуальная папка с теми же низкими привилегиями, что и у самого процесса Internet Explorer.
Вообще говоря, в Windows 7 процессы выполняются с уровнями целостности, определенными функцией MIC (обязательный контроль целостности). «Защищенный режим» Internet Explorer, работает как процесс с «низкими привилегиями». Это предотвращает запись в Internet Explorer областей файловой системы или реестра, для которых требуются более высокие права! Затем происходит следующее: Windows создает набор папок и файлов для использования с Internet Explorer в защищенном режиме.
Эти папки и файлы имеют тот же уровень Низких привилегий, что и Internet Explorer. Эти 4 папки с «низкими привилегиями», используемые Internet Explorer в Windows при повседневной работе, – это «Кэш», «Куки», «История» и «Temp».
- % LocalAppData% \ Microsoft \ Windows \ Временные файлы Интернета \ Низкий
- % AppData% \ Microsoft \ Windows \ Cookies \ Low
- % LocalAppData% \ Microsoft \ Windows \ History \ Low
- % LocalAppData% \ Temp \ Low
Windows 7/8 также создает Виртуальные папки для хранения файлов, которые Internet Explorer пытается сохранить в защищенных местах. Таким образом, вместо того, чтобы вызывать сбой надстройки при попытке записать файл данных в папку Windows или Program Files, Windows 7 или Vista перенаправляет операцию записи в виртуальный эквивалент. Таким образом, программа продолжает работать, считая, что она записала файлы в системную папку; мало понимая, что данные фактически были записаны в виртуализированную скрытую папку, которая отражает фактический путь и хранится в папке «Временные файлы Интернета».
Аналогичным образом, если есть какая-либо попытка записи в реестр, она перенаправляется в область с низким уровнем целостности реестра.
Где находится файл index.dat
А затем, где находится файл index.dat , расположенный в Windows 7 | 8? Index.dat – это файлы, скрытые на вашем компьютере, которые содержат все веб-сайты, которые вы когда-либо посещали. Каждый URL и каждая веб-страница указаны там. Чтобы получить к нему доступ, вам нужно будет ввести в адресной строке Explorers следующее местоположение и нажать кнопку «Перейти»:
C: \ Users \ имя пользователя \ AppData \ Local \ Microsoft \ Windows \ Временные файлы Интернета \ Content.IE5
Только тогда вы сможете увидеть файл index.dat. Заключение ? Папка Content.IE5 очень скрыта !
Теперь возникает естественный вопрос: почему Microsoft решила присвоить ей статус Защищенных системных файлов/папок?
В конце концов, папка «Temporary Internet Files» (Cache) является рассадником и источником распространения вирусов, троянских загрузчиков и других вредоносных программ, загружаемых из Интернета. Помимо вашей папки «Windows», это одна из папок, в которой можно найти большинство таких вредоносных файлов. Так почему же такой «очаг» получает такую защиту, когда даже некоторым Windows dll не предоставляются такие привилегии?
Библиотеки
Разделение определения и реализации класса очень распространено для библиотек, которые вы можете использовать для расширения возможностей своей программы. Во всех своих программах вы включаете заголовки, которые принадлежат стандартной библиотеке, например, iostream , string , vector , array и другие. Обратите внимание, что вам не нужно добавлять в свои проекты iostream.cpp , string.cpp , vector.cpp или array.cpp . Вашей программе нужны объявления из файлов заголовков, чтобы компилятор мог проверить, что вы пишете синтаксически правильные программы. Однако реализации для классов, принадлежащих стандартной библиотеке C++, содержатся в предварительно скомпилированном файле, который подключается на этапе компоновки. Вы никогда не видите кода.
Помимо какого-либо программного обеспечения с открытым исходным кодом (где предоставляются файлы .h и .cpp ), большинство сторонних библиотек предоставляют только файлы заголовков и предварительно скомпилированный файл библиотеки. Для этого есть несколько причин:
- линковка предварительно скомпилированной библиотеки выполняется быстрее, чем перекомпиляция ее каждый раз, когда она вам понадобится;
- одна копия предварительно скомпилированной библиотеки может использоваться несколькими приложениями, тогда как скомпилированный код компилируется в каждый исполняемый файл, который его использует (увеличение размеров файлов);
- соображения интеллектуальной собственности (вы не хотите, чтобы украли ваш код).
Разделение ваших собственных файлов на объявление (заголовок) и реализацию (файл исходного кода) – это не только хорошая организация проекта, но оно также упрощает создание ваших собственных пользовательских библиотек. Создание собственных библиотек выходит за рамки данной серии руководств, но разделение объявления и реализации является предварительным условием для этого.
По мере того, как программы становятся больше (и используют больше файлов), становится всё более утомительным давать предварительные объявления каждой функции, которую вы хотите использовать, и которая определена в другом файле. Было бы неплохо, если бы вы могли поместить все свои предварительные объявления в одно место, а затем импортировать их, когда они вам понадобятся?
Исходные файлы кода C++ (с расширением .cpp ) – это не единственные файлы, которые обычно встречаются в программах на C++. Другой тип файлов – это заголовочный файл (иногда просто заголовок). Заголовочные файлы обычно имеют расширение .h , но иногда вы можете встретить их с расширением .hpp или вообще без расширения. Основная цель заголовочного файла – распространять объявления в исходные файлы кода.
Ключевой момент
Заголовочные файлы позволяют нам размещать объявления в одном месте, а затем импортировать их туда, где они нам нужны. Это может сэкономить много времени при наборе текста в проектах из нескольких файлов.
Где находится папка временных интернет-файлов
Начиная с Windows Vista и далее в Windows 7 , папка временных файлов Интернета находится по адресу:
C: \ Users \ имя пользователя \ AppData \ Local \ Microsoft \ Windows \ Temporary Internet Files
В Windows 8 и Windows 8.1 интернет-кэш или временные интернет-файлы хранятся в этой папке:
C: \ Users \ имя пользователя \ AppData \ Local \ Microsoft \ Windows \ INetCache
Предполагая, что ваша Windows установлена на диске C. Чтобы увидеть это, вам нужно не только установить флажок Показать скрытые файлы и папки в параметрах папки, но и снять флажок Скрыть защищенные файлы/папки операционной системы .
Рекомендации по использованию заголовочных файлов
Вот еще несколько рекомендаций по созданию и использованию заголовочных файлов.
Читайте также: