стандарт C++ говорит в §2.8/1:
Заголовок имя предобработки маркеры должны появляться только в пределах предварительной обработки директивы #include
(16.2). Последовательности в обеих формах заголовков сопоставляются с вариантами реализации с заголовками или с внешними именами исходных файлов, как указано в 16.2.
Итак, у вас есть это: все это определено реализацией. §16.2 то говорит, среди других вещей, непосредственно не связанные с вашим вопросом:
предварительной обработки директивы формы
#include
"
д-символ последовательности"
новая линия
вызывает замену этой директивы всем содержимым исходного файла , идентифицированного указанной последовательностью между "
разделителей. Именованный исходный файл выполняется в образом реализации.
И это имеет большой смысл. Почему бы вам не создать компилятор C++ для файловых систем, которые не используют соглашение «..»?
Таким образом, чтобы ответить на ваш вопрос: Да, это законно в соответствии со стандартом C++, но это не удивительно, потому что почти все технически законно для директивы #include
.
Более интересный вопрос заключается в том, что об этом может сообщить документация вашей реализации на C++. Но даже тогда вам может быть предоставлено довольно общее объяснение по этой теме. Например, MSVC 2015 documentation for #include
говорит:
путь спекуляция это имя файла, который необязательно может предшествовать спецификации в каталога. Имя файла должно содержать имя существующего файла.Синтаксис спецификации пути зависит от операционной системы, на которой скомпилирована программа .
Да, его юридический, но убедитесь, что всякий раз, когда вы создаете двоичный, а затем родительский каталог вашего двоичного каталога, это файл test.h. – Nishant
Относительные пути, такие как «../test.h», являются совершенно законными. Путь будет применяться относительно вашего «Включить путь». Таким образом, ваш путь include включает в себя папку с исходным исходным файлом, а также другие папки, которые вы настраиваете с настройками вашего проекта. Поэтому он будет искать test.h в родительской папке каждого из них. –
Возможно, я не сказал ясно. Является ли стандартная гарантия на C++ .. означает родительский каталог? – Caesar