Почему это запутанное # включает & quot; .. \ .. \ [и т. Д. и т.д.] & Quot. Скажите работа?

Я хочу добавить #включают директива к моему a.cpp файл и файл заголовка B.h находится в папке на два уровня вверх (например, если исходный файл находится в * Е: \ А \ В \ С \ D \ Е \ Г \ \ Н *, заголовочный файл находится в * E: \ A \ B \ C \ F *, конечно, имена будут намного длиннее этого), поэтому я набрал это запутанное утверждение в Visual Studio 2010:

#include"../../

И функция Intellisense в VS 10 показал список файлов, и B.h в этом! Я не знаю, правильно ли это утверждение, но я думаю, что с этим что-то не так. Кто-нибудь из вас может сказать мне, правильно это или нет? И не могли бы вы дать мне лучшее решение для этого?
Большое спасибо.

0

Решение

Почему бы это не сработало? Вы когда-нибудь делали cd ../../mydir и проверил что это делает? Это эквивалент этого. .. а также . указать на специальный каталог в Windows и Linux. . текущий каталог, в то время как .. это предыдущий каталог. Так ../../file.h вернется в два каталога, чтобы найти файл, который вы ищете. В конце концов, #include "..." оператор работает с относительным путем, в котором находится файл. Обычно при написании библиотек и у вас есть основной detail подкаталог вы пытаетесь получить к нему доступ через #include "../detail/myfile.hpp"в то время как другие библиотеки, такие как boost, выбирают #include <boost/config/myfile.hpp>

2

Другие решения

Я думаю, что лучше всего включить "-I <INCLUDE_DIR>" параметр для вашей сборки и просто #include заголовок без каталога в списке. Здесь вы указываете компилятору и компоновщику искать ваши заголовочные файлы.

0

..\ перемещает вас вверх на один каталог, так ..\..\ переместит вас вверх на два каталога. Я полагаю, это нормально, если вы можете предположить, что местоположение скрипта никогда не изменится. Однако, если вы переместили скрипт на другой диск, у вас будут проблемы. Возможно, было бы лучше включить E: \ A \ B \ C \ D \ E \ F \ B.h вместо того, чтобы доказать будущее.

-1
По вопросам рекламы [email protected]