Как указывать каталог в #include?

Ya Zaregalsya

Известный
Автор темы
386
134
Наверно тупой вопрос, но как реализовать что-то типа #include "MyCatalog/header.h"? Чтобы не придумывать изощрённые имена своим файлам, а просто вынести их в отдельный раздел по тому же принципу, как с пространством имён. Если просто сделать фильтр в Visual Studio, то это никак не влияет на #include, всё равно он видит только сами файлы как будто они в общей куче.
 
Решение
ты типа хочешь в файлах, которые лежат в папке MyCatalog использовать #include "MyCatalog/header.h"?
как вариант можно сделать вот так: #include "../MyCatalog/header.h"
или добавить в additional include directories (/I опшн) корневую папку в которой лежит MyCatalog. И тогда ты сможешь использовать #include "MyCatalog/header.h". При чем производительный вариант использовать <> скобки, ибо тогда компилятор будет искать сразу в /I параметрах. А если "", то он будет еще рекурсивно на 10 каталогов углубляться в поисках. Хотя по стилю кода лучше юзать "" для не системных файлов

.deserve

Участник
32
36
первое: создаешь новый каталог в папке с проектом и туда скидываешь всё чё хочешь, ток не забудь добавить это в проект в vs (он не отслеживает изменения в родительском каталоге)

второе: почитай ка: от мелкомягких
 
  • Нравится
Реакции: Ya Zaregalsya

Ya Zaregalsya

Известный
Автор темы
386
134
Первое так уже и сделано, но всё равно желаемого результата добиться особо не получается, я создал папку под свои файлы, вручную насоздавал там .h и .cpp, потом в VS добавил фильтр с тем же названием, что и папка, и по одному добавил каждый существующий файл. Статья от МС отвечает на некоторые вопросы, например почему в в одних файлах команда #include "MyCatalog/header.h" работает, а в других она уже пестрит ошибками. Видимо так и должно быть, чтобы потом свою папку можно было свободно тягать по разным проектам.

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

.deserve

Участник
32
36
ты типа хочешь в файлах, которые лежат в папке MyCatalog использовать #include "MyCatalog/header.h"?
как вариант можно сделать вот так: #include "../MyCatalog/header.h"
или добавить в additional include directories (/I опшн) корневую папку в которой лежит MyCatalog. И тогда ты сможешь использовать #include "MyCatalog/header.h". При чем производительный вариант использовать <> скобки, ибо тогда компилятор будет искать сразу в /I параметрах. А если "", то он будет еще рекурсивно на 10 каталогов углубляться в поисках. Хотя по стилю кода лучше юзать "" для не системных файлов
 
  • Нравится
Реакции: Ya Zaregalsya

Ya Zaregalsya

Известный
Автор темы
386
134
ты типа хочешь в файлах, которые лежат в папке MyCatalog использовать #include "MyCatalog/header.h"?
как вариант можно сделать вот так: #include "../MyCatalog/header.h"
или добавить в additional include directories (/I опшн) корневую папку в которой лежит MyCatalog. И тогда ты сможешь использовать #include "MyCatalog/header.h". При чем производительный вариант использовать <> скобки, ибо тогда компилятор будет искать сразу в /I параметрах. А если "", то он будет еще рекурсивно на 10 каталогов углубляться в поисках. Хотя по стилю кода лучше юзать "" для не системных файлов
Добавил в дополнительные каталоги включения полную директорию проекта, теперь везде можно писать как хотелось, но при этом можно писать и как раньше, просто header.h. Значит ли это, что вся эта писанина по факту никаких конфликтов имён не разрешит, и если у нас два файла header.h в разных папках, то всё равно будут проблемы? И не будет ли багов из-за того, что в дополнительных каталогах указана папка с текущим проектом?
 

.deserve

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

Но эти конфликты могут возникнуть только из-за косячного способа инкдуда, а я напомню их два: "" и <>.
Опять же читай доку мсдн в каком порядке работает поиск файла с инклуда. Там порядок поиска написан. Он дальше не будет искать файл, если он его уже нашёл лол.

p.s. и еще конфликт может быть при добавлении 2 одинаковых каталогов в /I. Но нахуя тебе это делать?
 
  • Нравится
Реакции: Ya Zaregalsya