Директива компилятора include нельзя открыть файл
Директива
Эта директива читается препроцессором и приказывает ему вставить в данную программу содержимое пользовательского или системного заголовочного файла. Эти файлы в основном импортируются из внешнего источника в текущую программу.
Процесс импортирования таких файлов, которые могут быть системными или пользовательскими, известен как 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 🖰 на подчеркнутом коде.
Я пробовал программу "Здравствуй, мир", и эта строка:
Было подчеркнуто зеленым. Я старался:
- Удаление строки
- Переписать строку
- Нажав на желтую лампочку и выбрав обновить
Исправлено предупреждение об ошибке. я не знаю, если это решило актуальную проблему. Но потом я собираю через Linux Linux на Windows 10
Я попал сюда после некоторой борьбы, но на самом деле мне не хватало только:
- Кликните левой кнопкой мыши по лампочке линии ошибки
- Нажмите Edit Include path
- Тогда это окно всплывающее
- Пожалуйста, добавьте этот каталог в вашу переменную среды (путь):
C : \ MinGW - w64 \ x86_64-8.1.0 - win32 - SEH - rt_v6 - rev0 \ mingw64 \ Bin \
- В поле Включить обнаруженные ошибки укажите путь к вашей папке включения в
"includePath": ["C: /mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/include/"]
, поскольку это путь, откуда компилятор выбирает библиотеку для включения в вашу программу.
Если у кого-то есть такая проблема, возможно, вам просто нужно установить build-essential.
После закрытия и повторного открытия VS, это должно разрешиться.
Пробовал эти решения и многие другие за 1 час. Закончилось закрытием VS Code и открытием снова. Это просто
Читайте также: