Просмотр полной версии : Как указывать каталог в #include?
Ya Zaregalsya
03.11.2021, 17:14
Наверно тупой вопрос, но как реализовать что-то типа #include "MyCatalog/header.h"? Чтобы не придумывать изощрённые имена своим файлам, а просто вынести их в отдельный раздел по тому же принципу, как с пространством имён. Если просто сделать фильтр в Visual Studio, то это никак не влияет на #include, всё равно он видит только сами файлы как будто они в общей куче.
.deserve
03.11.2021, 17:53
первое: создаешь новый каталог в папке с проектом и туда скидываешь всё чё хочешь, ток не забудь добавить это в проект в vs (он не отслеживает изменения в родительском каталоге)
второе: почитай ка: от мелкомягких (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvY3BwL3 ByZXByb2Nlc3Nvci9oYXNoLWluY2x1ZGUtZGlyZWN0aXZlLWMt Y3BwP3ZpZXc9bXN2Yy0xNjA)
Ya Zaregalsya
03.11.2021, 19:44
Первое так уже и сделано, но всё равно желаемого результата добиться особо не получается, я создал папку под свои файлы, вручную насоздавал там .h и .cpp, потом в VS добавил фильтр с тем же названием, что и папка, и по одному добавил каждый существующий файл. Статья от МС отвечает на некоторые вопросы, например почему в в одних файлах команда #include "MyCatalog/header.h" работает, а в других она уже пестрит ошибками. Видимо так и должно быть, чтобы потом свою папку можно было свободно тягать по разным проектам.
Хотя это странно конечно, что можно подключать файлы из каталога более высокого уровня, но при этом нельзя упомянуть собственный каталог.
.deserve
03.11.2021, 20:01
ты типа хочешь в файлах, которые лежат в папке MyCatalog использовать #include "MyCatalog/header.h"?
как вариант можно сделать вот так: #include "../MyCatalog/header.h"
или добавить в additional include directories (/I опшн) корневую папку в которой лежит MyCatalog. И тогда ты сможешь использовать #include "MyCatalog/header.h". При чем производительный вариант использовать <> скобки, ибо тогда компилятор будет искать сразу в /I параметрах. А если "", то он будет еще рекурсивно на 10 каталогов углубляться в поисках. Хотя по стилю кода лучше юзать "" для не системных файлов
Ya Zaregalsya
03.11.2021, 20:27
ты типа хочешь в файлах, которые лежат в папке 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
03.11.2021, 20:36
Это нужно постараться, чтобы наступить на конфликтную ситуацию, но в если даже и наступишь, то vs тебе подскажет конкретный путь к данному файлу (при инклуде будет попап с обзором в файловой системе, и если навести на файлик и подожадать, то он покажет путь до него).
Но эти конфликты могут возникнуть только из-за косячного способа инкдуда, а я напомню их два: "" и <>.
Опять же читай доку мсдн в каком порядке работает поиск файла с инклуда. Там порядок поиска написан. Он дальше не будет искать файл, если он его уже нашёл лол.
p.s. и еще конфликт может быть при добавлении 2 одинаковых каталогов в /I. Но нахуя тебе это делать?
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot