Директива компилятора include нельзя открыть файл

Обновлено: 04.07.2024

Директива

Эта директива читается препроцессором и приказывает ему вставить в данную программу содержимое пользовательского или системного заголовочного файла. Эти файлы в основном импортируются из внешнего источника в текущую программу.

Процесс импортирования таких файлов, которые могут быть системными или пользовательскими, известен как File Inclusion (англ. - включение файлов). Этот тип директивы препроцессора указывает компилятору включить файл в исходный код программы.

1. Заголовочный файл или стандартный файл. Это файл, который содержит C/C++ объявления функций и макроопределения для совместного использования между несколькими исходными файлами.

Такие функции, как printf() , scanf() , cout , cin и различные другие функции ввода-вывода или другие стандартные функции содержатся в различных заголовочных файлах. Поэтому для использования этих функций пользователям необходимо импортировать несколько заголовочных файлов, которые определяют требуемые функции.

Синтаксис

Включая использование " ". При использовании двойных кавычек (" ") препроцессор получает доступ к текущей директории, в которой находится исходный "header_file". Этот тип в основном используется для доступа к любым заголовочным файлам пользовательской программы или пользовательским файлам.

Включая использование < >. При импорте файла с использованием угловых скобок(< >) препроцессор использует предопределенный путь к каталогу для доступа к файлу. В основном он используется для доступа к системным заголовочным файлам, расположенным в стандартных системных каталогах.

Пример 1. Здесь показан импорт системного заголовка ввода/вывода или стандартного файла.

Пример 2. Создание и импорт пользовательского файла.

Создание пользовательского заголовка с именем "process.h".

Созданный основной файл, в который будет включен вышеприведенный "process.h".

Объяснение

Двойные кавычки " " предписывают препроцессору просмотреть текущую папку или стандартную папку всех заголовочных файлов, если они не найдены в данной папке.

Если вместо " " используются угловые скобки, то необходимо сохранить ее в стандартную папку заголовочных файлов. При использовании " " необходимо убедиться, что созданный заголовочный файл сохранен в той же папке, в которой находится текущий C-файл, использующий этот заголовочный файл.

Указывает препроцессору включить содержимое указанного файла в точку, где отображается директива.

Синтаксис

Remarks

Путь-Spec — это имя файла, которому при необходимости может предшествовать Спецификация каталога. Имя файла должно указывать на существующий файл. Синтаксис инструкции path-Spec зависит от операционной системы, в которой компилируется программа.

2) в каталогах открытых в данный момент файлов включения в порядке, в котором они были открыты. Поиск начинается в каталоге родительского включаемого файла, а затем выполняется в каталогах всех включаемых файлов-прародителей.

3) вдоль пути, указанного в каждом /I параметре компилятора.

1) вдоль пути, указанного в каждом /I параметре компилятора.

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

Если включаемые файлы являются вложенными и при компиляции происходит в командной строке, поиск в каталоге начинается в каталоге родительского файла. Затем он переходит по каталогам всех файлов «бабушке». Таким образом, поиск начинается относительно каталога, в котором находится исходный файл, обрабатываемый в текущий момент. Если файл не найден, Поиск перемещается в каталоги, заданные параметром компилятора /I (дополнительные каталоги включаемых файлов) . Наконец, выполняется поиск каталогов, заданных INCLUDE переменной среды.

в среде разработки Visual Studio INCLUDE переменная среды игнорируется. Вместо них используются значения, указанные в свойствах проекта для каталогов включения. дополнительные сведения о настройке каталогов включения в Visual Studio см. в разделе включаемые каталоги и дополнительные каталоги включаемыхданных.

В приведенном ниже примере демонстрируется включение файлов с помощью угловых скобок:

В этом примере в исходную программу добавляется содержимое файла с именем stdio.h . Угловые скобки приводят препроцессору для поиска в каталогах, заданных INCLUDE переменной среды для stdio.h , после того, как он выполняет поиск в каталогах, заданных /I параметром компилятора.

В следующем примере демонстрируется включение файлов, заданных в кавычках:

В примере добавляется содержимое файла, указанного defs.h в исходной программе. Кавычки означают, что препроцессор сначала попытается найти этот файл в каталоге, содержащем родительский исходный файл.

Только для систем Майкрософт

Чтобы найти исходные файлы для включения, препроцессор сначала выполняет поиск в каталогах, заданных /I параметром компилятора. Если /I параметр отсутствует или неисправен, препроцессор использует INCLUDE переменную среды для поиска всех включаемых файлов в угловых скобках. INCLUDE Переменная среды и /I параметр компилятора могут содержать несколько путей, разделенных точкой с запятой ( ; ). Если в качестве части /I параметра или переменной среды отображается несколько каталогов INCLUDE , препроцессор ищет их в том порядке, в котором они отображаются.

Представим себе следующую команду:

приводит к тому, что препроцессор ищет в каталоге D:\msvc\include\ включаемые файлы, например stdio.h . Ниже еще один пример:

Эта инструкция действуют точно так же. Если найти файл в обоих наборах каталогов не удастся, возникает неустранимая ошибка компилятора.

Если имя файла указано полностью для включаемого файла с путем, содержащим двоеточие (например, F:\MSVC\SPECIAL\INCL\TEST.H ), препроцессор следует за путем.

  • Системные подключаемые файлы используются для определения интерфейсов к составляющим операционной системы. Они подключаются для предоставления объявлений и определений, требуемых для работы с системными вызовами и библиотеками.
  • Подключаемые файлы пользователя содержат определения для интерфейсов между исходными файлами программы.

Обычно подключаемые файлы заканчиваются на '.h' и следует избегать использования других стандартов.

Эта модификация используется для подключения системных файлов. При ее выполнении производится поиск файла с именем FILE в списке указанных заранее каталогов, а затем в стандартном списке системных каталогов. С помощью опции '-I' указываются каталоги для поиска подключаемых файлов. Опция '-nostdinc' запрещает поиск в стандартных системных каталогах и производит поиск только в указанных каталогах.

Аргумент FILE не может содержать символа '>', хотя он может содержать символ '<'.

Эта модификация применяется для подключаемых файлов для программ пользователя. Сначала файл FILE просматривается в текущем каталоге, а затем в каталогах для системных подключаемых файлов. Текущим каталогом является каталог текущего обрабатываемого файла. Он просматривается в первую очередь, так как предполагается, что в нем находятся файлы, имеющие отношение к текущему обрабатываемому файлу. (Если указана опция '-I-', то текущий каталог не просматривается.)

Эта возможность позволяет определять макросы, что дает возможность изменять имена подключаемых файлов. Эта возможность, например, используется при переносе программ с одной операционной системы на другие, где требуются разные подключаемые файлы.

и основная программа с именем 'program.c', использующая этот файл. Данные, полученные при обработке программы 'program.c' будут выглядеть следующим образом: Для подключаемых файлов нет ограничений на объявления и макроопределения. Любой фрагмент С программы может быть включен в другой файл. Подключаемый файл может даже содержать начало выражения, заканчивающееся в исходном файле или окончание выражения, начало которого находится в исходном файле. Хотя комметарии и строковые константы не могут начинаться подключаемом файле и продолжаться в исходном файле. Не завершенный комментарий, стороковая или символьная константа в подключаемом файле приводят к возникновению ошибки в конце файла.

Подключаемый файл может содержать начало или окончание сиснтаксической конструкции, такой как определение функции.

Часто случается, что подключаемый файл включает в себя другой файл. Это может привести к тому, что отдельный файл будет подключаться неоднократно, что может привести к возникновению ошибок, если файл определяет типы структур или определения типов. Поэтому следует избегать многократного подключения файлов.

Обычно это достигается путем заключения в условие всего содержимого этого файла, как показано ниже:

Макрос 'FILE_FOO_SEEN' указывает на то, что файл уже однажды вкючался. В подключаемых файлах пользователя макрос не должен начинаться с символа '_'. В системных подключаемых файлах его имя не должно начинаться с символа '__' во избежание возникновения конфликтов с программами пользователя. Каким бы ни был файл, имя макроса должно содержать имя файла и некоторый дополнительный текст во избежание вознкновения конфликтов с другими подключаемыми файлами.

"Наследование" это то, что происходит, когда какой либо объект или файл образует некоторую часть своего содержимого путем виртуального копирования из другого объекта или файла. В случае подключаемых С файлов наследование означает, что один файл включает другой файл, а затем заменяет или добавляет что-либо.

Иногда необходимо чтобы у наследуемого и основного подключаемого файла были одинаковые имена.

Например, предположим, что прикладная программа использует системный подключаемый файл 'sys/signal.h', но версия файла '/usr/include/sys/signal.h' на данной системе выполняет того, что требуется в прикладной программе. Будет удобнее определить локальную версию, возможно с именем '/usr/local/include/sys/signal.h' для замены или добавления к версии, поставляемой с системой.

Я использую код Visual Studio в моем проекте C ++. Я установил расширение Microsoft C / C ++ для кода VS . Я получил следующую ошибку:

Нажмите на лампочку и отредактируйте открываемый файл JSON. Выберите правильный блок, соответствующий вашей платформе (есть Mac , Linux , Win32 - версия ms-vscode.cpptools: 3). Обновите пути в includePath (имеет значение, если вы компилируете с VS Code) или browse.paths (имеет значение, если вы перемещаетесь с VS Code) или в обоих.

Благодаря @Francesco Borzì я добавлю его ответ здесь:

Вы также можете нажать кнопку мыши Right 🖰 на подчеркнутом коде.

enter image description here

Я пробовал программу "Здравствуй, мир", и эта строка:

Было подчеркнуто зеленым. Я старался:

  1. Удаление строки
  2. Переписать строку
  3. Нажав на желтую лампочку и выбрав обновить

Исправлено предупреждение об ошибке. я не знаю, если это решило актуальную проблему. Но потом я собираю через Linux Linux на Windows 10

Я попал сюда после некоторой борьбы, но на самом деле мне не хватало только:

enter image description here

  • Кликните левой кнопкой мыши по лампочке линии ошибки
  • Нажмите Edit Include path
  • Тогда это окно всплывающее

enter image description here

  1. Пожалуйста, добавьте этот каталог в вашу переменную среды (путь):

C : \ MinGW - w64 \ x86_64-8.1.0 - win32 - SEH - rt_v6 - rev0 \ mingw64 \ Bin \

  1. В поле Включить обнаруженные ошибки укажите путь к вашей папке включения в

"includePath": ["C: /mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/include/"]

, поскольку это путь, откуда компилятор выбирает библиотеку для включения в вашу программу.

Если у кого-то есть такая проблема, возможно, вам просто нужно установить build-essential.

После закрытия и повторного открытия VS, это должно разрешиться.

Пробовал эти решения и многие другие за 1 час. Закончилось закрытием VS Code и открытием снова. Это просто

Читайте также: