2012-03-01 5 views
0

Если я просто включить файл, написавГде компилятор Visual Studio ищет #includes?

#include "blah.h" 

где именно делает поиск компилятор для этого файла? Я понимаю, что существуют ограничения.

Что произойдет, если файл находится не в той же папке, но гораздо глубже в структуре, как я могу рассказать компилятору посмотреть там? одинаково, если он находится над файлом в каталоге? или, может быть, глубже в другой ветке?

По существу, у меня нет понимания того, как вы перемещаетесь по структуре. Я видел, что некоторые из них выглядят примерно так:

#include ".././foo/whatever/blah.h" 

Что означают точки? они возвращаются, но разные цифры означают разные вещи?

Также это основано на структуре файлов на компьютере или их структуре в проводнике решений?

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

+0

Там в настройки в свойствах проекта, который называется " Включить каталоги "(в разных версиях vs он находится под другой дочерней ветвью, в vs2010 он находится в Configuration Properties -> VC++ Directories). Всегда точки в «include» возвращаются на основе структуры файлов на диске, начиная с местоположения исходного файла, который их включал (а также, если он не найден там, тогда поиск начинается с местоположения каждого каталога в «включить каталоги», но опять же по физическому расположению на диске. – user1227804

ответ

2

От visual studio documentation on #include


Обыски препроцессора для включения файлов в следующем порядке:

  1. В том же каталоге, что и файл, который содержит инструкцию #include.

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

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

  4. Вдоль путей, заданных переменной среды INCLUDE.


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

2 точки в пути перемещают вас по каталогу, одна точка относится к текущему каталогу. Любое другое количество точек недействительно. Таким образом, ваш примерный путь .././foo/whatever/blah.h по существу означает «переместиться на один уровень, заглянуть в папку foo, а затем посмотреть в папку что угодно». Единственная точка в этом случае на самом деле ничего не делает.

Навигационная на основе файловой структуры, а не структуры в растворе исследователя

1

Когда вы пишете #include "a.h" в a.cpp, то препроцессор ищет a.h в том же каталоге, где находится a.cpp.Если этот поиск не поддерживается или если поиск завершается неудачно, препроцессор выполняет поиск определенных для этого мест назначения для этого a.h.

«Что означают точки?»
Допустим, у вас есть файл с этим FULLPATH: C:\myDir\myProjects\a\a.cpp:
. = C:\myDir\myProjects\a
.. = C:\myDir\myProjects

Вы также должны взглянуть на What is the difference between #include <filename> and #include "filename"?

Смежные вопросы